Xml Xpath CDATA等于
我有以下XML模式Xml Xpath CDATA等于,xml,xpath,Xml,Xpath,我有以下XML模式 <xml> <series> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <year>2003</year> <a> <b> <c><!
<xml>
<series>
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<year>2003</year>
<a>
<b>
<c><![CDATA[ Foo ]]></c>
</b>
</a>
</series>
<series>
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<year>2003</year>
<a>
<b>
<c><![CDATA[ Bar ]]></c>
</b>
</a>
</series>
</xml>
XQuery启动
詹姆斯·麦戈文
2003
XQuery启动
詹姆斯·麦戈文
2003
我正在尝试获取系列
,该系列的c
值为foo。如果CDATA中没有包装c
,我可以使用以下xpath/xml/series/a/b[c=“Foo”]/../../../code>找到它,但由于CDATA,这不起作用-我如何找到series
的c
值为Foo的series
谢谢。XPath操作的数据模型中不会出现CDATA节。您的XPath没有找到所需的节点,这是对的,但并不是CDATA部分导致出现问题。谓词[c=“Foo”]
正在查找字符串值为“Foo
”的c
元素,但此处没有此类节点:您的c
元素的字符串值为“Foo
”和“Bar
”(即,“Foo”和“Bar”前面和后面各有一个空格)
试试/xml/series/a/b[contains(c,“Foo”)]/../../../../../
或/xml/series/a/b[normalize space(c)=“Foo”]/../../../../../../
,我想你会得到你想要的结果。两者都能与我提供的模式完美配合。但是,如果b
作为子节点有多个c
节点,则该节点不起作用。如果您可以提供进一步的帮助,那将是非常好的。如果目标是:找到任何系列元素,其属性包含字符串值(在空间规范化之后)为“Foo”的c
元素,那么我会说类似/xml/series[a/b/c[规范化空间(.)=“Foo”]