所以我有两个元素节点,我实际上是在尝试加入。我希望顶级节点保持不变,但子节点将被交叉引用的节点替换。
假设:
<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 }
答案 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>