<categories>
<member>
<name> Ants </name>
<size> 8 </size>
<submember>
<structure>
<name>Acrobat Ants </name>
<size>Slightly over 1/8" </size>
<color>Tan, red with heart shaped abdomen </color>
<habitat>Inside moist wood</habitat>
<found>Throughout the US</found>
<desc></desc>
<productLink> </productLink>
</structure>
<structure>
<name>Argentine Ant </name>
<size>About 1/16" </size>
<color>Light to dark brown </color>
<habitat>Shallow areas with moist soil</habitat>
<origin>Argentina and Brazil</origin>
<desc></desc>
<productLink></productLink>
</structure>
<structure>
<name>Carpenter Ants </name>
<size>1/4-1/2" </size>
<color>Varies</color>
<Habitat>Inside decayed or moist wood</Habitat>
<Found>Throughout the US</Found>
<desc>C</desc>
<productLink></productLink>
</structure>
</submember>
</member>
</categories>
假设我有一个像这样的XML文件(实际的xml比这长得多)然后如何使用xpath获得“Ants”结构?
答案 0 :(得分:4)
我猜你想要包含member
的{{1}}作为Ants
。这应该足够了:
Name
请注意,引号包含名称所需的空格。空格在XML中很重要,因此/categories/member[name=' Ants ']
周围的空格也是内容的一部分。否则,您可以先对空格进行标准化,然后在比较之前先有效地修剪过多的空格。
Ants
正如亚历杭德罗指出的那样,您可能希望/categories/member[normalize-space(name)='Ants']
元素下的structure
个后代。然后你需要进一步挖掘。
Ants
答案 1 :(得分:1)
假设我有一个像这样的XML文件 (实际的xml比 那么)我怎么得到“蚂蚁” 结构使用xpath?
我想您要选择任何structure
与子name
,其字符串值包含字符串“Ants”。
使用:
/*/*/*/structure[contains(name, 'Ants')]
这将选择任何具有子structure
的{{1}}元素,该子元素包含字符串“Ants”,并且(name
元素)是任何元素的子元素任何元素,它是XML文档顶部元素的子元素。
或者,使用:
sructure
这会选择一个 /*/*/*/structure[contains(concat(name,' '), ' Ants ')]
元素来满足上一个表达式中的所有要求,但其structure
子元素必须包含一个以空格开头的“蚂蚁”,后跟空格或存在完整字符串值name
的结束子字符串。
答案 2 :(得分:0)
以下是@ Jeff(好)答案的一些扩展。这会定位<structure>
下面的所有<member>
元素,其名称包含Ants
(占前导/尾随空格):
/categories/member[normalize-space(name)='Ants']/submember/structure
或者只是第一个:
/categories/member[normalize-space(name)='Ants']/submember/structure[1]
只需Carpenter Ants
:
/categories/member[normalize-space(name)='Ants']/submember/structure[normalize-space(name)='Carpenter Ants']
等等......
你应该尝试将它们概括为适合自己的用途。