XPath 1.0将字符串作为节点列表返回

时间:2012-02-06 15:11:12

标签: xpath

我有一个奇怪的困境......

首先,我只使用XPath 1.0,这就是系统仍在使用的古老过程,所以尽管我喜欢使用2.0,但它不会发生。

我有一个节点: <Column Name="Letters">A, B, C, D, E, F, G, H, I</Column>

我希望xpath返回这些字母的节点列表。 这有可能吗?是否可以返回从字符串中存在的字母数派生的节点列表? 是否可以遍历字符串,并以某种方式保留索引在下一个节点的字符串中的位置?

欢迎任何建议,替代方案和建议。

先谢谢!

编辑: 如果如上所示有“Letters”节点的9个实例,是否可以使用(假设我已经删除了所有空格/逗号):substring(Letters,1,1)来检索第一个值,然后当程序遍历到下一个节点,检索子字符串(字母,2,1)等,但不是静态索引,而是返回类似于:substring(Letters,node2outof9,1)?

编辑:EX)

<Column Name="Letters">A, B, C, D, E, F, G, H, I</Column> <Column Name="Letters">A, B, C, D, E, F, G, H, I</Column> <Column Name="Letters">A, B, C, D, E, F, G, H, I</Column> ...

说我有以下伪代码:

节点列表中的

foreach节点(列@ Name =字母) substring(node, index? ,1)

我是否可以使用xpath函数或属性来为我提供当前遍历的节点列表中哪个节点的索引?

我正在考虑通过使用当前节点的索引来获取我需要的字母的解决方法。所以我要回信“信件”9次,每次一个字母,一次1个。

我知道这是一个奇怪的请求,所以我真的很感激任何帮助...

更新: 问题已经解决,但必须使用解决方法,因为很明显这不能仅使用XPATH来完成。感谢大家的建议和意见。回答Jakrabbit对我提供的奇怪信息的足够解决方案。

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

fn:tokenize(Column[@Name="Letters"]/text(), ', ')

会给你一个字母的节点集。然后你可以通过索引var。

访问它
fn:tokenize(Column[@Name="Letters"]/text(), ', ')[i]

http://www.w3.org/TR/xpath-functions/#func-tokenize

更新:我认为只要没有其他分隔符并且结果实际上是字母(1个字符长),这在XPath 1.0中会做同样的事情

substring(translate(/Column[@Name="Letters"]/text(), ', ', ''), i, 1)

答案 1 :(得分:0)

XPath选择现有节点,它不会创建任何新节点。因此,无论是XPath 1.0还是2.0都无关紧要,如果你想创建一个包含单独使用XPath的字母的新节点列表,你需要一个像XSLT或XQuery这样的宿主语言来创建新的节点