嗨,我有一个XML文件,其结构如下:
<foo>
<bar></bar>
<bar></bar>
...
</foo>
Run Code Online (Sandbox Code Playgroud)
我不知道如何抓取一系列节点.有人可以给我一个抓取条形节点100-200的xpath表达式的例子.
我有一个XML文件,如下所示:
<Elements name="Entities" xmlns="XS-GenerationToolElements">
Run Code Online (Sandbox Code Playgroud)
我将不得不打开很多这些文件.每个命名空间都有不同的命名空间,但一次只有一个命名空间(我永远不会在一个xml文件中找到两个命名空间).
使用XPath我想有一种自动方式将给定的命名空间添加到命名空间管理器.到目前为止,我只能通过解析xml文件来获取命名空间,但我有一个XPathNavigator实例,它应该有一个很好的,干净的方式来获取命名空间,对吧?
- 要么 -
鉴于我只有一个命名空间,以某种方式使XPath使用xml中唯一存在的命名空间,从而通过始终附加命名空间来避免混乱代码.
你们为XPath使用了什么工具?为什么?现在我正在使用
SketchPath似乎对我来说最为突出,因为它实际上可以帮助您创建xpath并且它非常先进.如果你还没有尝试过,你应该这样做.
缺点是SketchPath:你必须在机器上安装它,否则它太棒了.
对WhiteBeam的缺点:你必须上传你出于安全原因我并不总是想做的文件,你可以上传的文件大小有一些限制,上传文件很烦人.另外我认为用于该工具的xpath与运行.NET应用程序之间可能存在一些细微差别.但是现在不记得了.请记住它.
这是我的xml的摘录:
<node/>
<node/>
<node id="1">content</node>
<node/>
<node/>
<node/>
<node id="2">content</node>
<node/>
<node/>
Run Code Online (Sandbox Code Playgroud)
我定位于node[@id='1'].我需要一个Xpath来匹配所有<node/>元素,直到下一个非空节点(这里node[@id='2']).
编辑: @id属性只是为了更清楚地解释我的问题,但不是我原来的XML.我需要一个不使用@id属性的解决方案.
我不希望空的兄弟姐妹后匹配node[@id='2'],所以我不能用天真following-sibling::node[text()=''].
我怎样才能做到这一点?
我对建议/ 伪代码/解释而不是实际实现感兴趣.
如果节点没有属性,则get/generate String with value of its xpath
情况如果节点具有属性,则迭代通过属性列表并为包括节点的每个属性创建xpath.
忠告?希望你能提供一些有用的英特尔
编辑:
这样做的原因是..我正在用jmeter编写自动化测试,所以对于我需要验证请求实际完成其工作的每个请求,所以我通过使用xpath获取节点值来声明结果.(额外信息 - 不相关)
当请求很小时,手动创建断言并不是问题,但对于较大的请求,它真的很痛苦...(额外信息 - 不相关)
BOUNTY:
我正在寻找Java方法
目标
我的目标是从这个ex xml文件中实现以下目标:
<root>
<elemA>one</elemA>
<elemA attribute1='first' attribute2='second'>two</elemA>
<elemB>three</elemB>
<elemA>four</elemA>
<elemC>
<elemB>five</elemB>
</elemC>
</root>
Run Code Online (Sandbox Code Playgroud)
产生以下内容:
//root[1]/elemA[1]='one'
//root[1]/elemA[2]='two'
//root[1]/elemA[2][@attribute1='first']
//root[1]/elemA[2][@attribute2='second']
//root[1]/elemB[1]='three'
//root[1]/elemA[3]='four'
//root[1]/elemC[1]/elemB[1]='five'
Run Code Online (Sandbox Code Playgroud)
解释:
BOUNTY UPDATE:
我发现这个例子,它没有产生正确的结果,但我看起来像这样:
我有一个要求,我想要if else语句检查一个节点是否有属性或它只有字符串.
例如:节点中的1个具有0 File(s) found,而另一个具有诸如的属性<autoincludesystem_info mdate='08/23/2011' mtime='09:51' ampm='PM' filesize='64' filename='AFP_p.tgp' />
下面是两个节点的示例
<product>
<autoIncludeUser>0 File(s) found</autoIncludeUser>
<autoIncludeSystem>
<autoincludesystem_info mdate='08/23/2011' mtime='09:51' ampm='PM' filesize='64' filename='AFP_p.tgp' />
<autoincludesystem_info mdate='08/23/2011' mtime='09:51' ampm='PM' filesize='3,879' filename='AnalystsExpressionMacros.tgp' />
<autoincludesystem_info mdate='08/23/2011' mtime='09:51' ampm='PM' filesize='475' filename='base64Converter.tgp' />
<autoincludesystem_info mdate='08/23/2011' mtime='09:51' ampm='PM' filesize='<DIR>' filename='codePages' />
</autoIncludeSystem>
<autoIncludeStudio>0 File(s) found</autoIncludeStudio>
<externalLibrarySystem>
<externalLibrarySystem_info mdate='08/23/2011' mtime='09:52' ampm='PM' filesize='196,608' filename='AFPtoXML_DP.dll' />
<externalLibrarySystem_info mdate='08/23/2011' mtime='09:52' ampm='PM' filesize='13,259' filename='ASN1toXSDRunner.jar' />
<externalLibrarySystem>
</product>
Run Code Online (Sandbox Code Playgroud)
我将如何确定,如果一个节点只是字符串或attribs和基于我可以得到的值或者String或attrib values分别.
我想使用XPath href从a-tag 获取属性,但它在同一个文件中有两次出现.我怎么相处?我需要检查如果有一个href值为$ street/object 的属性,我有这个代码,它不起作用:
$product_photo = $xpath->query("//a[contains(@href,'{$object_street}fotos/')][1]");
$product_360 = $xpath->query("//a[contains(@href,'{$object_street}360-fotos/')][1]");
$product_blueprint = $xpath->query("//a[contains(@href,'{$object_street}plattegrond/')][1]");
$product_video = $xpath->query("//a[contains(@href,'{$object_street}video/')][1]");
Run Code Online (Sandbox Code Playgroud)
它根本不会返回任何东西.谁能帮助我?
我有一个看起来像这样的XML
<element1>
<element2>
<element3>
<element4>Hello</element4>
<element5>World</element5>
</element3>
<element3>
<element4>Hello2</element4>
<element5>World2</element5>
</element3>
<element3>
<element4>Hello3</element4>
<element5>World3</element5>
</element3>
</element2>
</element1>
Run Code Online (Sandbox Code Playgroud)
我试图使用Xpath得到这样的结果:
Hello.World
Hello2.World2
Hello3.World3
Run Code Online (Sandbox Code Playgroud)
我在下面使用了concat函数但是没有得到正确的结果.
Concat功能:
concat(/element1/element2/element3/element4/text(),".", /element1/element2/element3/element5/text())
Run Code Online (Sandbox Code Playgroud)
结果我得到了:
Hello.World
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到正确的结果?我正在使用XPath与Camel Spring DSL.
编辑:
XQuery,XSLT和SPel中的解决方案也很受欢迎.
编辑
我尝试了字符串连接,但它不起作用:
字符串连接函数:
string-join((/element1/element2/element3/element4/text(), /element1/element2/element3/element5/text()),".")
Run Code Online (Sandbox Code Playgroud)
结果我得到了:
Hello.Hello2.Hello3.World.World2.World3
Run Code Online (Sandbox Code Playgroud) 我的XML文件如下所示:
<?xml version="1.0"?>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2008-08-19">
<Items>
<Item>
<ItemAttributes>
<ListPrice>
<Amount>2260</Amount>
</ListPrice>
</ItemAttributes>
<Offers>
<Offer>
<OfferListing>
<Price>
<Amount>1853</Amount>
</Price>
</OfferListing>
</Offer>
</Offers>
</Item>
</Items>
</ItemSearchResponse>
Run Code Online (Sandbox Code Playgroud)
我想做的就是提取ListPrice.
这是我正在使用的代码:
>> from elementtree import ElementTree as ET
>> fp = open("output.xml","r")
>> element = ET.parse(fp).getroot()
>> e = element.findall('ItemSearchResponse/Items/Item/ItemAttributes/ListPrice/Amount')
>> for i in e:
>> print i.text
>>
>> e
>>
Run Code Online (Sandbox Code Playgroud)
绝对没有输出.我也试过了
>> e = element.findall('Items/Item/ItemAttributes/ListPrice/Amount')
Run Code Online (Sandbox Code Playgroud)
没有不同.
我究竟做错了什么?
我在表的列中有类似下面的XML:
<?xml version="1.0" encoding="utf-8"?>
<container>
<param name="paramA" value="valueA" />
<param name="paramB" value="valueB" />
...
</container>
Run Code Online (Sandbox Code Playgroud)
我试图通过TSQL从XML中获取valueB部分
到目前为止,我正在获得正确的节点,但现在我无法弄清楚如何获取属性.
select xmlCol.query('/container/param[@name="paramB"]') from LogTable
Run Code Online (Sandbox Code Playgroud)
我想我可以添加/ @值到最后,但是SQL告诉我属性必须是节点的一部分.我可以找到许多用于选择子节点属性的示例,但兄弟属性中没有任何属性(如果这是正确的术语).
任何帮助,将不胜感激.
xpath ×10
xml ×7
xslt ×3
xquery ×2
devtools ×1
domdocument ×1
elementtree ×1
html ×1
java ×1
namespaces ×1
python ×1
spring-el ×1
sql-server ×1