0

次の 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>

fooの値seriesを持つを取得しようとしています。CDATA にラップされていない場合は、次の xpath を使用して見つけることができますが、CDATA原因で機能しません。cc/xml/series/a/b[c="Foo"]/../..seriesc

ありがとう。

4

1 に答える 1

2

CDATA セクションは、XPath によって操作されるデータ モデルには表示されません。XPath が必要なノードを見つけられないのは正しいですが、問題を引き起こしているのは CDATA セクションではありません。述語は文字列値が " "[c="Foo"]の要素を探していますが、ここにはそのようなノードはありません:要素には " " と " "の文字列値があります(つまり、"Foo" と "Bar" の前後に a が続きます)。空白)。cFoocFooBar

/xml/series/a/b[contains(c,"Foo")]/../..または試してみてください/xml/series/a/b[normalize-space(c) = "Foo"]/../..。期待どおりの結果が得られると思います。

于 2012-08-16T19:45:10.263 に答える