Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Xpath CDATA等于_Xml_Xpath - Fatal编程技术网

Xml Xpath CDATA等于

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模式

<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”]