Frage

Also ich habe zwei Knoten von Elementen, dass ich im Wesentlichen zu verbinden bin versucht. Ich möchte, dass die Top-Level-Knoten die gleiche, aber die untergeordneten Knoten bleiben, indem sie diejenigen Querverweis ersetzt werden.

Gegeben:

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

Ich möchte durch „Liste“, um Schleife und Querverweis Elemente in „Stoff“ für dieses Ergebnis:

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

Ich möchte, dies zu tun, ohne zu wissen, mit welchen Attributen auf „Liste“ sein könnte. Mit anderen Worten will ich sie nicht ausdrücklich haben zu rufen wie

attribute a { $list/@a }, attribute b { $list/@b }
War es hilfreich?

Lösung

Verwendung:

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

Damit werden alle <item> Elemente in $list1 der Wert dessen foo Attribut gleich dem foo Attribut eines der <item> Elemente in $ list2.

Um alle Attribute des <list> Element zu kopieren, so etwas tun :

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

Andere Tipps

Etwas simplier ... ein neues Objekt aus einem bestehenden zu schaffen, aber ohne seine Kinder nur Attribute

übernehmen:

let $ alte_liste: =

Dies erzeugt eine neue Liste kopiert seine Attribute

 <list>{$old_list/@*}</list>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top