XPath 1.0:从多个节点结果返回一个字符串?

时间:2011-10-18 15:19:42

标签: xml xpath

所以说我有一个节点结构,如:

<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做的是返回一个字符串,其中包含所有主要数字= 1个节点的所有n个文本字段中的文本。
这可能使用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']]

所以这样做不是将所有节点值结果连接成一个字符串,然后使用contains(),它分别搜索每一行的单词,从而消除了对不可能的需要。 感谢所有帮助人员,如果没有所有出色的回复,就不可能做到这一点! (我会给大家投票,但我太新了:()

2 个答案:

答案 0 :(得分:4)

这是通过string-join()函数在XPath 2.0中完成的。它可以使用<xsl:for-each>在XSLT 1.0中完成。但我不认为在没有主机语言支持的情况下可以在纯XPath 1.0中完成。

答案 1 :(得分: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

虽然,我不确定你是否可以在结果字符串中找到新行。