是否有一个XPath表达式可用于在CDATA部分中导航XML?

Mar*_*urg 1 java xml xpath

我正在试图弄清楚如何使用XPath从以下XML文档中的XML片段中获取exceptionID和instrumentID值(是的,CDATA中的XML有点奇怪,但这是我从第三方服务获得的)

<?xml version="1.0"?>
  <exception>
    <info>
      <![CDATA[
        <info>
          <exceptionID>1</exceptionID>
          <instrumentID>1</instrumentID>
        </info>
      ]]>
    </info>
</exception>
Run Code Online (Sandbox Code Playgroud)

是否可以在一个XPath语句中获取值?

我在Java中使用javax.xml.xpath.XPath(JDK 1.5 with Xalan 2.7.1和Xerces 2.9.1),例如

XPath xpath = XPathFactory.newInstance().newXPath();

Long exceptionId  = new Long(((Double)xpath.evaluate(this.exceptionIdXPath, 
                               document, XPathConstants.NUMBER)).longValue());
Run Code Online (Sandbox Code Playgroud)

这是this.exceptionIdXPath变量,我不知道如何设置,我知道例如:

/exception/info/text()/info/exceptionID 将无法正常工作(text()返回CDATA内的数据,但没有"知识"它是XML)

Mar*_*mas 5

是的,你可以做到.但是CDATA部分内的任何内容都是字符串,不会成为DOM的一部分.因此,您必须使用XPath的字符串操作函数.

在XPath中,您可以使用substring-before和substring-after.这样的事情可能有用:

substring-before(substring-after(/exception/info,"<exceptionID>"), "</exceptionID>")
Run Code Online (Sandbox Code Playgroud)