2013-05-13 80 views
1

仅使用XPath可以执行以下操作吗?我想找到一种方法来做到这一点在1.0我不认为它可能在1.0。有没有办法在XPath中分配一个变量?

<test> 
    <title>title1</title> 
    <title>title2</title> 
    <title>title3</title> 
    <creator>creator1</creator> 
    <creator>creator2</creator> 
</test> 

我想下面的输出:

title1 creator1 
title2 creator2 
title3 

我想这可能是更适合于XQuery的,但我不知道,因为我从来没有使用过。将xquery添加到当前的应用程序以及我试图避免的原因将是很多工作。我最近想到的工作是使用

/test/title/fn:string-join((text(), /test/creator/text()[position()]), ' ') 

问题是我在这个例子中得到了所有的创造者。我想知道是否有某种方式来获得当前的位置并为创作者设置位置?我知道如何轻松地在xslt中执行此操作,但这不适合我。

+0

检查关于使用XPath字符串连接这样一个问题:http://stackoverflow.com/questions/1403971/xpath-to-return -string统合-的排位赛,子节点值。 – 2013-05-13 15:01:41

回答

0

这在XPath 1.0中不可行。在这两个的XQuery(1.0是罚款)和XPath 2.0,你可以这样做:

for $i in 1 to max((count(//title), count(//creator))) 
return string-join((//title[$i], //creator[$i]), ' ') 
+0

谢谢。尽管这确实导致所有事情都成为一个项目,而不是分开。 – Flips 2013-05-13 15:32:02

+0

只要删除'string-join'并为每个标题和创建者调用'/ data()',就会得到文本节点序列。如果你想在输出中使用标签,只需删除'string-join'调用。 :)请在下次提问时准确指定预期的输出,那么您将在第一时间获得您正在寻找的答案。 – 2013-05-13 15:35:14

+0

对不起,虽然我做到了。你给的例子给出了一个结果 title1 creator1 title2 creator2 title3。我只是觉得新的一行很清楚,我希望数据分离或以多种XdmItems的方式分类。再次感谢。 – Flips 2013-05-13 15:47:47

相关问题