我有一个奇怪的困境。
首先,我只使用XPath 1.0,这是系统仍在使用的古老过程,因此,尽管我很想使用2.0,但它不会发生。
我有这样一个节点:<Column Name="Letters">A, B, C, D, E, F, G, H, I</Column>
我希望xpath返回这些字母的节点列表。
这有可能吗?是否可以返回从字符串中存在的字母数得出的节点列表?
是否可以遍历字符串,并以某种方式保留下一个节点在字符串中的位置的索引?
欢迎任何建议,替代方案和建议。
提前致谢!
编辑:
如果如上所示有9个“ Letters”节点的实例,则可以使用(假设我已删除所有空白/逗号):substring(Letters,1,1)检索第一个值,然后程序遍历下一个节点,检索substring(Letters,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 = Letters)
子串(node,index ?, 1)
是否可以使用xpath函数或属性为我提供当前正在遍历的节点列表中哪个节点的索引?
我正在考虑通过使用当前节点的索引来获取我需要的字母的解决方法。因此,我要退回9次“字母”,每次要抓一个字母,一次要抓1个字母。
我知道这是一个奇怪的要求,因此,我将非常感谢您的帮助...
更新:
该问题已解决,但必须使用一种解决方法,因为显然不能仅通过XPATH来完成此操作。感谢所有的建议。回答Jakrabbit,以提供我所提供的奇怪信息的充分解决方案。
最佳答案
您可以使用类似:
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)
关于xpath - XPath 1.0返回字符串作为节点列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9162217/