2013-05-13 4 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-конкатенация-оф-узел значений отборочного-ребенка-. –

ответ

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

+0

Просто удалите 'string-join' и вызовите'/data() 'для каждого заголовка и создателя, и вы получите последовательность текстовых узлов. Если вам нужны теги на выходе, просто удалите вызов 'string-join'. :) Пожалуйста, точно укажите ожидаемый результат в следующий раз, когда вы зададите вопрос, тогда вы получите именно тот ответ, который вы ищете в первый раз. –

+0

Извините, хотя я и сделал. Пример, который вы дали, возвращает один результат название1 создатель1 название2 создатель2 название3. Я просто подумал, что новая строка была ясна, что я хотел, чтобы данные были разделены или в саксенских терминах несколько XdmItems. Еще раз спасибо. – Flips

Смежные вопросы