我想找到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吗?
答案 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( . , '>' ), '<' ) "/>
</xsl:for-each>
</Root>
</xsl:template>
</xsl:stylesheet>