Как получить узел без детей в xQuery?

Таким образом, у меня есть два узла элементов, к которым я по существу пытаюсь присоединиться. Я хочу, чтобы высокоуровневый узел остался таким же, но дочерние узлы, которые будут заменены теми, пересекаются ссылаемый.

Данный:

<stuff>
  <item foo="foo" boo="1"/>
  <item foo="bar" boo="2" />
  <item foo="baz" boo="3"/>
  <item foo="blah boo="4""/>
</stuff>

<list  a="1" b="2">
  <foo>bar</foo>
  <foo>baz</foo>
</list>

Я хочу циклично выполниться через "список" и элементы перекрестной ссылки в "материале" для этого результата:

<list  a="1" b="2">
  <item foo="bar" boo="2" />
  <item foo="baz" boo="3"/>  
</list>

Я хочу сделать это, не имея необходимость знать о том, чем атрибуты могли бы быть в "списке". Другими словами, я не хочу должным быть явно вызывать их как

attribute a { $list/@a }, attribute b { $list/@b }
5
задан mbrevoort 11 June 2010 в 20:32
поделиться

1 ответ

Используйте:

$ list1 / item [@foo = $ list2 / item / @ foo]

Это выбирает все элементы в $ list1 значение атрибута foo которого равно атрибуту foo одного из элементов в $ list2.

Чтобы скопировать все атрибуты элемента , сделайте что-то вроде этого :

  for $attr in /whateverIsthePathLeadingToList/list/@*
    return 
      attibute {name($attr)} {$attr}
4
ответ дан 14 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: