2012-08-16 33 views
0

我有下面的XML SchemaXpath的CDATA等於

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

我試圖讓有FOOc價值series。如果c未包裹在CDATA中,我可以使用以下xpath /xml/series/a/b[c="Foo"]/../..找到它,但由於CDATA而無法工作 - 我如何才能找到seriesc值爲foo

謝謝。

回答

2

CDATA部分不出現在由XPath操作的數據模型中。你是對的,你的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"]/../..我想你會得到你所期望的。

+0

兩者都與我提供的模式完美配合。但是,如果'b'作爲一個孩子有多個'c'節點,它不起作用。如果你能提供進一步的幫助,那將是太棒了。 – v0idless 2012-08-16 20:10:01

+1

如果目標是:找到任何'series'元素的屬性,它包含一個'c'元素的字符串值(空間標準化後)是「Foo」,那麼我會說'/ xml/series [a/b/c [normalize-space(。)=「Foo」]]' – 2012-08-16 20:49:39