Wie Knoten ohne Kinder in xQuery zu bekommen?
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 }
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>