Wie kann ich den Wert eines Attributknotens über XPath extrahieren?
Eine XML-Beispieldatei lautet:
<parents name='Parents'>
<Parent id='1' name='Parent_1'>
<Children name='Children'>
<child name='Child_2' id='2'>child2_Parent_1</child>
<child name='Child_4' id='4'>child4_Parent_1</child>
<child name='Child_1' id='3'>child1_Parent_1</child>
<child name='Child_3' id='1'>child3_Parent_1</child>
</Children>
</Parent>
<Parent id='2' name='Parent_2'>
<Children name='Children'>
<child name='Child_1' id='8'>child1_parent2</child>
<child name='Child_2' id='7'>child2_parent2</child>
<child name='Child_4' id='6'>child4_parent2</child>
<child name='Child_3' id='5'>child3_parent2</child>
</Children>
</Parent>
</parents>
Bisher habe ich diese XPath-Zeichenfolge:
//Parent[@id='1']/Children/child[@name]
Es werden nur child
Elemente zurückgegeben, aber ich möchte den Wert des name
Attributs haben.
Für meine XML-Beispieldatei möchte ich Folgendes ausgeben:
Child_2
Child_4
Child_1
Child_3
Antworten:
Ihr Original
child[@name]
bedeutet ein Element,child
das ein Attribut hatname
. Du willstchild/@name
.quelle
Verwenden Sie Folgendes, um nur den Wert (ohne Attributnamen) abzurufen
string()
:string(//Parent[@id='1']/Children/child/@name)
Die Funktion fn: string () gibt den Wert ihres Arguments als zurück
xs:string
. Wenn es sich bei dem Argument um ein Attribut handelt, wird der Wert des Attributs als zurückgegebenxs:string
.quelle
xqilla
es notwendig anzurufenxs:string
. Ich wundere mich warum.xs
das Namespace-Präfix für die XPath-Funktionen. Sie sind also nicht mit anderen verwechselt.Du solltest benutzen
//Parent[@id='1']/Children/child/data(@name)
Die Attribute können nicht serialisiert werden, sodass Sie sie nicht in einem XML-Ergebnis zurückgeben können. Sie müssen die Daten mithilfe der Funktion data () aus dem Attribut abrufen.
quelle
Wie oben beantwortet:
gibt nur das
name
Attribut der 4child
Knoten aus, die zu demParent
durch sein Prädikat angegebenen gehören[@id=1]
. Sie müssen dann das Prädikat ändern[@id=2]
, um diechild
Knoten für das nächste zu erhaltenParent
.Wenn Sie den
Parent
Knoten jedoch vollständig ignorieren und Folgendes verwenden:Sie können das
name
Attribut allerchild
Knoten auf einmal auswählen .quelle
Dies ist der Fall, der verwendet werden kann, wenn das Element 2 Attribute hat und wir das eine Attribut mit Hilfe eines anderen erhalten können.
quelle
@ryenus, Sie müssen das Ergebnis durchlaufen. So würde ich es in vbscript machen;
quelle
Verwenden Sie für alle XML-Dateien mit Namespace local-name ()
quelle