有没有办法在XPath中分配变量?

有没有办法在XPath中分配变量?,xpath,xpath-2.0,Xpath,Xpath 2.0,是否可以通过使用XPath执行以下操作?我想找到一种在1.0中实现这一点的方法,但我认为在1.0中是不可能的 范例 <test> <title>title1</title> <title>title2</title> <title>title3</title> <creator>creator1</creator> <creator>creator2<

是否可以通过使用XPath执行以下操作?我想找到一种在1.0中实现这一点的方法,但我认为在1.0中是不可能的

范例

<test>
  <title>title1</title>
  <title>title2</title>
  <title>title3</title>
  <creator>creator1</creator>
  <creator>creator2</creator>
</test>
我想这可能更适合xquery,但我不确定,因为我从未使用过它。将xquery添加到我当前的应用程序中需要做大量的工作,这也是我试图避免的原因。我想到的最接近工作的东西就是使用

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

问题是,在这个示例中,我得到了所有的两个创建者。我想知道是否有某种方法可以获得当前位置并为创建者设置位置?我知道如何在xslt中轻松实现这一点,但这不是我的选择。

这在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]), ' ')

检查有关使用XPath进行字符串连接的问题:。谢谢。虽然这会导致所有内容都是一个项目,而不是单独的。只需删除
string join
并为每个标题和创建者调用
/data()
,就可以得到文本节点的顺序。如果要在输出中添加标记,只需删除
字符串连接
调用。:)请在下次提问时准确地指定预期输出,然后您将在第一次提问时准确地得到您想要的答案。对不起,我想是这样的。您给出的示例返回了一个结果标题1 Creator 1 Title 2 Creator 2 Title 3。我只是觉得新行很清楚,我希望数据分开,或者用萨克森术语说是多个XDM。再次感谢。我刚刚意识到你在降价来源中使用了多行。你能准确地实现你所需要的吗?是的,我最终使用了:for$I in 1 to max((count(/test/title),count(/test/creator)))返回字符串连接((/test/title[$I]/text(),/test/creator[$I]/text()),“”)
for $i in 1 to max((count(//title), count(//creator)))
return string-join((//title[$i], //creator[$i]), ' ')