XPath find all elements with specific child node

前端 未结 2 1210
南笙
南笙 2020-12-04 16:25

Could you please help me to find all the elements b which have the child element c in the example below?


    
             


        
相关标签:
2条回答
  • 2020-12-04 17:08

    It should be as simple as

    //b[c]
    

    i.e. find a b anywhere that has a c child.

    0 讨论(0)
  • 2020-12-04 17:19

    Whenever the structure of the XML document is known, it is better to avoid using the // XPath pseudo-operator, as its use can result in big inefficiency (traversal of the whole document tree).

    Therefore, I recomment this XPath expression for the provided XML document:

    /*/b[c]
    

    This selects any b element that is a child of the top element of the XML document and that has a child-element named c.

    UPDATE: The OP asked a second question just minutes ago:

    The second question is I want to combine 2 conditions: I want to get the element which have name = "b2" and has the element c But this syntax seems not to work: //b[@name='b2' and c]

    The provided XPath expression does select exactly the wanted element.

    Here is XSLT - based verification:

    <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output omit-xml-declaration="yes" indent="yes"/>
     <xsl:strip-space elements="*"/>
    
     <xsl:template match="/*">
         <xsl:copy-of select="//b[@name='b2' and c]"/>
     </xsl:template>
    </xsl:stylesheet>
    

    When this transformation is applied on the provided XML document:

    <a>
        <b name = "b1"></b>
        <b name = "b2"><c/></b>
        <b name = "b3"></b>
    </a>
    

    the XPath expression is evaluated and the correctly-selected element is copied to the output:

    <b name="b2">
       <c/>
    </b>
    
    0 讨论(0)
提交回复
热议问题