xpath find if node exists

后端 未结 6 1412
我在风中等你
我在风中等你 2020-11-28 04:09

Using a xpath query how do you find if a node (tag) exists at all?

For example if I needed to make sure a website page has the correct basic structure like /html/bod

相关标签:
6条回答
  • 2020-11-28 04:15

    Try the following expression: boolean(path-to-node)

    0 讨论(0)
  • 2020-11-28 04:21
    <xsl:if test="xpath-expression">...</xsl:if>
    

    so for example

    <xsl:if test="/html/body">body node exists</xsl:if>
    <xsl:if test="not(/html/body)">body node missing</xsl:if>
    
    0 讨论(0)
  • 2020-11-28 04:22

    I work in Ruby and using Nokogiri I fetch the element and look to see if the result is nil.

    require 'nokogiri'
    
    url = "http://somthing.com/resource"
    
    resp = Nokogiri::XML(open(url))
    
    first_name = resp.xpath("/movies/actors/actor[1]/first-name")
    
    puts "first-name not found" if first_name.nil?
    
    0 讨论(0)
  • 2020-11-28 04:23

    Patrick is correct, both in the use of the xsl:if, and in the syntax for checking for the existence of a node. However, as Patrick's response implies, there is no xsl equivalent to if-then-else, so if you are looking for something more like an if-then-else, you're normally better off using xsl:choose and xsl:otherwise. So, Patrick's example syntax will work, but this is an alternative:

    <xsl:choose>
     <xsl:when test="/html/body">body node exists</xsl:when>
     <xsl:otherwise>body node missing</xsl:otherwise>
    </xsl:choose>
    
    0 讨论(0)
  • 2020-11-28 04:23

    A variation when using xpath in Java using count():

    int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
    if( numberofbodies==0) {
        // body node missing
    }
    
    0 讨论(0)
  • 2020-11-28 04:35

    Might be better to use a choice, don't have to type (or possibly mistype) your expressions more than once, and allows you to follow additional different behaviors.

    I very often use count(/html/body) = 0, as the specific number of nodes is more interesting than the set. For example... when there is unexpectedly more than 1 node that matches your expression.

    <xsl:choose>
        <xsl:when test="/html/body">
             <!-- Found the node(s) -->
        </xsl:when>
        <!-- more xsl:when here, if needed -->
        <xsl:otherwise>
             <!-- No node exists -->
        </xsl:otherwise>
    </xsl:choose>
    
    0 讨论(0)
提交回复
热议问题