XML XPath问题

时间:2011-03-21 05:48:03

标签: xml xpath

 <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”结构?

3 个答案:

答案 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']

等等......

你应该尝试将它们概括为适合自己的用途。