XATA到CDATA内的标签

时间:2011-08-09 04:51:28

标签: xml xpath

我想找到CDATA内部标签的xpath。在xml片段下面。

<books>
 <book>
  <title></title>
  <content><![CDATA[<p>Hi hello Hw r u?</p><p>We are fine</p><p>Hi babeeee!!!!</p>]]>    </content>
 </book>
</books>

我想获取<p>内第一个<content>标记内的数据。 任何人都可以给它正确的xpath吗?

2 个答案:

答案 0 :(得分:4)

CDATA包含任意字符数据。与PCDATA(已解析字符数据的首字母缩写)相反,它不会被解析,因此内部没有“元素”的xpath。

答案 1 :(得分:3)

正如Leif所说,CDATA部分中的内容未被解析,因此它只是文本,即使它看起来像标记。你必须解析它。您可以使用Saxon(9.1或更高版本的商业版本)和saxon:parse来执行此操作。然后你会发现它没有很好地形成,所以你可能不得不求助于TagSoup之类的解析器来解析它。

您也可以将其视为字符串:

<xsl:stylesheet version="1.0"
  xmlns:saxon="http://saxon.sf.net/"
  exclude-result-prefixes="saxon"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <Root>
      <!--xsl:value-of select="saxon:parse(/books/book/content)"/-->
      <xsl:for-each select="books/book/content">
        <xsl:value-of select="
          substring-before(
          substring-after( . , '&gt;' ), '&lt;' ) "/>
      </xsl:for-each>
    </Root>
  </xsl:template>
</xsl:stylesheet>