如何使用xpath检查xml中是否存在元素?

Ara*_*ram 47 xml xpath

下面是我的元素层次结构.如何检查(使用xpath)AttachedXml元素存在于主要使用者的CreditReport

<Consumers xmlns="http://xml.mycompany.com/XMLSchema">
       <Consumer subjectIdentifier="Primary">
          <DataSources>
               <Credit>
                   <CreditReport>
                      <AttachedXml><![CDATA[ blah blah]]>
Run Code Online (Sandbox Code Playgroud)

Mad*_*sen 82

使用boolean()XPath函数

布尔函数将其参数转换为布尔值,如下所示:

  • 当且仅当它既不是正零或负零也不是NaN时,数字为真

  • 当且仅当它是非空的时,节点集才为真

  • 当且仅当其长度为非零时,字符串才为真

  • 除了四种基本类型之外的类型的对象将以依赖于该类型的方式转换为布尔值

如果主要ConsumerCreditReport中有AttachedXml,则它将返回. true()

boolean(/mc:Consumers
          /mc:Consumer[@subjectIdentifier='Primary']
            //mc:CreditReport/mc:AttachedXml)
Run Code Online (Sandbox Code Playgroud)

  • 好,+1正确的答案和良好的解释. (2认同)

Dim*_*hev 6

用途:

boolean(/*/*[@subjectIdentifier="Primary"]/*/*/*/*
                           [name()='AttachedXml' 
                          and 
                            namespace-uri()='http://xml.mycompany.com/XMLSchema'
                           ]
       )
Run Code Online (Sandbox Code Playgroud)


Jon*_*ier 5

撒克逊文档,虽然有点不清楚,似乎表明JAXP的XPath API将返回false评估XPath表达式时,如果没有匹配的节点被发现.

这篇IBM文章提到了null没有节点匹配时的返回值.

您可能需要根据此API稍微使用返回类型,但基本思路是您只需运行一个普通的XPath并检查结果是否为节点false/ null/等.

XPathFactory xpathFactory = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON);
XPath xpath = xpathFactory.newXPath();
XPathExpression expr = xpath.compile("/Consumers/Consumer/DataSources/Credit/CreditReport/AttachedXml");
Object result = expr.evaluate(doc, XPathConstants.NODE);

if ( result == null ) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)