5

所以我有两个元素节点,我基本上想加入。我希望顶级节点保持不变,但子节点将被那些交叉引用的节点替换。

鉴于:

<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 }
4

2 回答 2

4

利用:

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

这将选择其属性值等于$list2 中元素之一的属性的所有<item>元素。$list1foofoo<item>

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

  for $attr in /whateverIsthePathLeadingToList/list/@*
    return 
      attibute {name($attr)} {$attr}
于 2010-06-11T21:17:32.297 回答
4

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

认为 :

让 $old_list :=

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

 <list>{$old_list/@*}</list>
于 2011-08-30T00:26:33.947 回答