2011-10-18 103 views
2

所以說我有一個節點結構,如:XPath 1.0:從多個節點結果返回一個字符串?

<Row> 
<Column Name="Primary Number">1</Column> 
<Column Name="Secondary Number">01</Column> 
<Column Name="Text">This is all one sentence</Column> 
<Row> 
<Column Name="Primary Number">1</Column> 
<Column Name="Secondary Number">02</Column> 
<Column Name="Text">I would like to return</Column> 
<Row> 
<Column Name="Primary Number">1</Column> 
<Column Name="Secondary Number">03</Column> 
<Column Name="Text">as one string, in one xpath line</Column> 

首先我想說這不是我的XML的,我也沒有幫助修建它。但我不得不使用它來檢索我需要的信息....所以請幫助。

因此,我想要使用一個XPath的做法是從所有Primary Number = 1個節點的所有n個Text字段中返回一個包含文本的字符串。
這可能使用XPath 1.0嗎?

我有一個不那麼完美的解決方案,但如果我知道的輔助號碼的確切數字,只工作,然後它只是一個混亂的CONCAT的一堆()的...

您好所有,感謝大家的迴應! 所以我想用這個字符串做什麼,是使用contains()來搜索特定的關鍵字,但是我發現了一個實際上有一個連接所有值的字符串的快捷方式,並且只需要分享它以防萬一有類似的問題。 Tod的提示對此有所幫助,我只是給它添加了一個條件和BAM魔法。 這就是:

Table[@Name='TableName']/Row/Column[@Name='Text' and contains(text(),"keyword")][preceding-sibling::Column[@Name='Primary Number' and text()='15']] 

那麼,這樣做是不是連接所有節點值結果爲一個字符串,然後使用含有()就可以了,它單獨從而移出搜索每一行字對不可能的需要。 感謝所有的幫助人員,如果沒有所有的好迴應,都無法做到! (我想給大家投票窗口,但是我太新:()

+0

相同的問題:http://stackoverflow.com/questions/1403971/xpath-to-return-string-concatenation-of-qualifying-child-node-values – kan

+0

@Kan感謝您的鏈接,猜我是堅持使用凌亂的連接.... – JWiley

回答

1

這似乎是在這裏工作:

//Row/Column[@Name="Text"][preceding-sibling::Column[@Name="Primary Number"]/text()="1"] 

回報:

This is all one sentence 
I would like to return 
as one string, in one xpath line 

雖然,我如果你發現結果字符串中的新行可以接受,那麼你不能確定

+0

託德,謝謝你的偉大答案,它比我有一個更現代的時候,我學到了一些東西。但是,這返回一個節點列表,我需要一個字符串,它在XPath 1.0只是第一個節點(「這是一個句子」)。你能把所有三個都作爲字符串返回嗎? – JWiley

4

這是在XPath 2.0中通過string-join()函數完成的,它可以在XSLT 1.0中使用<xsl:for-each>。但是我不認爲在沒有主機語言支持的情況下可以在純XPath 1.0中完成。

+0

感謝您的幫助 – JWiley