如何在xQuery中获取没有子节点的节点?

时间:2010-06-11 20:32:56

标签: xml xpath xquery marklogic

所以我有两个元素节点,我实际上是在尝试加入。我希望顶级节点保持不变,但子节点将被交叉引用的节点替换。

假设:

<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”并在“stuff”中交叉引用元素以获得此结果:

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

我想这样做而不必知道“list”上可能包含哪些属性。换句话说,我不想像

那样明确地将它们称为
attribute a { $list/@a }, attribute b { $list/@b }

2 个答案:

答案 0 :(得分:4)

使用:

<强> $list1/item[@foo = $list2/item/@foo]

这会选择<item>$list1个{@ 1}}个元素的值,其中foo属性等于$ foo元素之一的<item>属性list2中。

要复制<list>元素的所有属性,请执行以下操作

  for $attr in /whateverIsthePathLeadingToList/list/@*
    return 
      attibute {name($attr)} {$attr}

答案 1 :(得分:3)

稍微简单一点......从现有对象创建一个新对象,但没有子对象属性

假设:

让$ old_list:=

这会创建一个复制其属性的新列表

 <list>{$old_list/@*}</list>