Frage

eine Stichprobe von XML-Dokument:

  <xml>
    <list>
      <item refid="1" />
      <item refid="3" />
    </list>
    <catalogue>
      <model id="1"><details /></model>
      <model id="2"><details /></model>
      <model id="3"><details /></model>
    </catalogue>
  </xml>

ich Abfrage so etwas wie // Modell möchten [@id = (// Artikel / @ refid)] zu erhalten all „Modell“ mit einer referenzierten-ID in „Liste“

War es hilfreich?

Lösung

  

würde ich Abfrage etwas mögen   // model [@id = (// Artikel / @ refid)] zu   erhalten alle „Modell“ mit einem referenzierten   id in "Liste"

Das Hauptproblem hier ist Ihr Mangel an Vertrauen und eigentlich keine XPath Motor läuft, die Ausdrücke zu bewerten Sie habe kommen mit.

Wenn Sie bewerten den XPath-Ausdruck, den Sie vorgeschlagen:

//model[ @id = (//item/@refid) ]
siehe

Sie werden feststellen, dass es wählt genau die (zwei) model Elemente, deren id Attribute referenziert werden durch die refid Attribute von item Elemente, die Kinder von list sind.

@ Jörn-Horstmann in seiner Antwort schon erklärt, warum man diese Ergebnisse zu erhalten.

Ein kleiner Hinweis ist in der Regel zu vermeiden, dass die // Abkürzung mit . Es bewirkt, dass das gesamte Dokument gescannt werden und ist sehr ineffizient. In diesem Fall würde ich das äquivalent verwenden, aber wahrscheinlich schnellen XPath-Ausdruck zu bewerten:

/*/catalogue/model[@id = /*/list/item/@refid]

Andere Tipps

Ihr XPath-Ausdruck sollte schon genau zurückgeben, was Sie wollen. Zitiert von http://www.w3.org/TR/xpath/#booleans, 5. Absatz:

  

Wenn ein Objekt verglichen werden soll, ein Knotenmenge und der andere ein String ist, dann wird der Vergleich wahr, wenn und nur wenn es einen Knoten in der Knotenmenge, so dass das Ergebnis der Durchführung des Vergleichs auf die String-Wert des Knotens und die andere Zeichenfolge true

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top