2016-07-28 11 views
2

So verwende ich XPath in meiner Java-Anwendung, um eine XML-Datei zu analysieren. Das Dateiformat ist wie folgt:XPath-Ausdruck zum Auswählen aller untergeordneten Knoten ohne Dekadenz Java

<RootNode> 
    <Node1>Value 1</Node1> 
    <Node2> 
     <Node2-1> 
      <Node2-1-1>Value 2.1.1</Node2-1-1> 
     </Node2-1> 
    </Node2> 
    <Node3>Value 3</Node3> 
</RootNode> 

Ich versuche, nur Node1 und Node3 in einer allgemeinen Weise zu greifen. Mit dem RootNode-Kontext habe ich es versucht:

* bekommt mich am nächsten aber schnappt sich Node2. Wie kann man nur einzelne Wertknoten bekommen und Knoten mit decedents ignorieren?

+0

ist 1 Wert ein Nachkomme von "Node1"? wenn ja, sollte Node1 ausgeschlossen werden? –

+0

Wert 1 ist ein Zeichenfolgenwert innerhalb von Node1. Ich denke, zumindest in den wenigen Java-Tests, die ich gemacht habe, zählt es als ein Text-Knoten, aber ich möchte in der Lage sein, den gesamten Knoten einschließlich der Zeichenfolge abzurufen. – MrJman006

Antwort

1

Ich habe versucht, dies in XPath-Tester online und es hat funktioniert:

RootNode/node()[not(*)] 
+0

Das funktionierte für mich mit einer kleinen Modifikation. Da ich den RootNode-Kontext bereits in meiner Anwendung hatte, musste ich den "RootNode /" - Teil nicht angeben. Ich brauchte nur "node() [not (*)]". – MrJman006

+0

Als eine Seite nicht für diejenigen, die den Java XPath-Parser verwenden, werden auch andere "Text" -Knoten abgerufen, aber das Filtern nach Node.ELEMENT_NODE auf node.type() wird nur diejenigen erhalten, an denen Sie interessiert sind. – MrJman006