所以我有元素,我基本上是试图加入的两个节点。我想顶层节点将保持不变,但通过引用的那些横被替换的子节点。

假设:

<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 }
有帮助吗?

解决方案

使用:

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

这个选择在<item>所有$list1元件,其foo属性是等于$ list2中的foo元件中的一个的<item>属性的值。

<强>为了复制<list>元素的所有属性,这样做

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

其他提示

略simplier ...创建从现有的新对象,但没有它的子属性仅

假设:

让$ old_list:=

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

 <list>{$old_list/@*}</list>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top