xml tester - Extrahieren Sie den Wert des Attributsknotens über XPath




beispiele position (6)

@ryenus, Sie müssen das Ergebnis durchlaufen. So würde ich es in VBScript machen;

Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.setProperty "SelectionLanguage", "XPath"
xmlDoc.load("kids.xml")

'Remove the id=1 attribute on Parent to return all child names for all Parent nodes
For Each c In xmlDoc.selectNodes ("//Parent[@id='1']/Children/child/@name")
    Wscript.Echo c.text
Next

Wie kann ich den Wert eines Attributknotens über XPath extrahieren?

Eine Beispiel-XML-Datei ist:

<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 gibt nur child Elemente zurück, aber ich möchte den Wert des Namensattributs haben.

Für meine Beispiel-XML-Datei möchte ich folgende Ausgabe haben:

Child_2
Child_4
Child_1
Child_3

Du solltest //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. Was Sie tun müssen, ist, die Daten aus dem Attribut mit der Funktion data () zu erhalten.


//Parent/Children[@  Attribute='value']/@Attribute

Dies ist der Fall, der verwendet werden kann, wenn Element ein 2-Attribut hat und wir das eine Attribut mit Hilfe eines anderen Attributs erhalten können.


Um nur den Wert (ohne Attributnamen) zu erhalten, verwenden Sie string() :

string( //Parent[@id='1']/Children/child/@name )

Die Funktion fn:string() gibt den Wert ihres Arguments als xs:string . Wenn das Argument ein Attribut ist, gibt es daher den Wert des Attributs als xs:string .


//Parent[@id='1']/Children/child/@name 

Ihr ursprüngliches child[@name] bedeutet ein Element child das einen Attributnamen hat. Sie möchten child/@name .


Für Teil 2 Ihrer Frage, sehen Sie meine Antwort auf Stored Procedure: übergeben XML als ein Argument und INSERT (Schlüssel / Wert-Paare) für ein Beispiel für die Verwendung von XML in einer gespeicherten Prozedur.

BEARBEITEN : Beispielcode unten basiert auf dem bestimmten Beispiel, das in den Kommentaren angegeben wird.

declare @MyXML xml

set @MyXML = '<booksdetail> 
                  <isbn_13>700001048</isbn_13> 
                  <isbn_10>01048B</isbn_10> 
                  <Image_URL>http://www.landt.com/Books/large/00/70100048.jpg</Image_URL> 
                  <title>QUICK AND FLUPKE</title> 
                  <Description> PRANKS AND JOKES QUICK AND FLUPKE - CATASTROPHE QUICK AND FLUPKE </Description> 
              </booksdetail>'

select Book.detail.value('(isbn_13/text())[1]','varchar(100)') as isbn_13, 
       Book.detail.value('(isbn_10/text())[1]','varchar(100)') as isbn_10, 
       Book.detail.value('(Image_URL/text())[1]','varchar(100)') as Image_URL, 
       Book.detail.value('(title/text())[1]','varchar(100)') as title, 
       Book.detail.value('(Description/text())[1]','varchar(100)') as Description
    from @MyXML.nodes('/booksdetail') as Book(detail)     




xml xpath