5

したがって、基本的に結合しようとしている要素のノードが2つあります。トップレベルノードを同じままにしておきたいのですが、子ノードは相互参照されたノードに置き換えられます。

与えられた:

<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の要素の1つの属性と等しい値のすべての<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 に答える