2010-12-16 8 views
-2

Ich verwende dom4j, um einen Wert im XML zu überschreiben. Die XML sieht wie folgt aus:XPATH-Problem mit dom4j

<start> 
    <name color="blue" time="555555"> 
     <element1 param="1"> 
      <value>value1</value> 
      <value>value2</value> 
      <value>value3</value> 
     <element1> 
    </name> 

    <name color="blue" time="888888"> 
     <element2 param="1"> 
      <value>value1</value> 
      <value>value2</value> 
      <value>value3</value> 
     <element1> 
    </name> 
</start> 

Ich versuche Knoten semect von:

List list= document.selectNodes("//element1[@timetime='555555']"); 

aber die Liste zurückgibt null. Ich wollte alle 3 Werte ändern, wo time="555555".

Gibt es keine Möglichkeit, direkt zu diesem Knoten zu gehen.

bitte helfen.

+0

I hat nimm es, dass "@ timetime" ein Tippfehler ist? – Tomalak

Antwort

4

wählen Sie die drei Werte, zu verwenden:

//name[@time='555555']/element1/value 

Wenn das null und zurückgibt, kann ein Standard-Namespace beteiligt sein und das bedeutet, dass Sie Ihre gesamte XML zeigen müssen.

XPath ist flexibel, wenn Sie möchten das gleiche wie das ausdrücken kann:

//value[ancestor::name[1]/@time='555555'] 
+0

// Name [@ Zeit = '555555']/Element1/Wert gibt null zurück. bitte helfe – user234194

+0

"// element1/@ time" funktioniert, aber ich wollte direkt zu diesem Knoten gehen. – user234194

+3

@ user234194: Sie könnten Ihre aktuelle XML-Datei veröffentlichen möchten. Ich meine Copy-Paste Varbatim, weil Sie offensichtlich Ihre Probe erfunden haben, und das falsch. – Tomalak

1

Die XPath, die Sie verwenden sucht eine Zeit-Attribut gleich 555555 auf element1. Ihre Zeitattribute sind jedoch auf dem Namen Knoten.

Sie könnten gehen entweder den Weg Tomalak vorgeschlagen, oder ändern Sie ihn auf:

//element1[../@time='555555'] 

Dieser sucht einen element1 Knoten mit einem Eltern, die eine Zeit-Attribut gleich 555555.

+0

das gibt null zurück – user234194

+0

Ich sehe, dass Sie Ihre XML aktualisiert haben, aber es ist derzeit ungültig - der Knoten Element1 muss geschlossen werden, und der Element2-Knoten benötigt einen Closing-Element2-Knoten anstelle eines öffnenden Elements1-Knoten. Der von mir gepostete XPath funktioniert, wenn ich diese Probleme behebe. Ich schlage vor sicherzustellen, dass die XML, die Sie verwenden, gültig ist, und dann versuchen, den Stammknoten auszuwählen und die Ergebnisse zu betrachten, dann ein Kind des Stammknotens und Blick auf die Ergebnisse usw., bis Sie das, was Sie haben versuchen zu wählen. – carols10cents