XPath - frage zur Adressierung

redbomber

Bekanntes Mitglied
Hallo zusammen,
ich bin gerade dabei mittels XPath auf die Attribute und Elemente eines XML Dokuments zuzugreifen.

Hier ein Beispiel für für ein XML-File:
Java:
<DataObject name="aName">
    <ASubObject name ="anotherName">
      ...
    </ASubObject>
    <AnotherSubObject>
      <Measurement>
        <DataPoints>
          <Point  c="0"/>
          <Point  c="0.5" />
          <Point  c="1" />
          <Point  c="1.5"  />
          <Point  c="2" />
          <Point  c="2.5" />
          <Point  c="3."  />
          <Point  c="3.5"  />
          <Point  c="4" />
          <Point  c="4.5" />
          <Point  c="5" />
          <Point  c="5.5"  />
          <Point  c="6" />
          <Point  c="6.5" />
        </DataPoints>
      </Measurement>
    </AnotherSubObject>
</DataObject>

So. Möchte ich nun auf die einzelnen Datenpunkte zugreifen. Dies mache ich das wie folgt:
Java:
XPathExpression expr = null;
expr = xpath.compile("/DataObject/AnotherSubObject/Measurement/DataPoints/Point[position() >= 2 and (position() <= 5)]/@c");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
     System.out.println(nodes.item(i).getNodeName()); 
}
Hier erhalte ich dann alle Werte zwischen den Elementen 2 und 5, was auch funktioniert.

Wenn ich allerdings folgendes XML Format vorliegen habe:

Java:
<DataObject name="aName">
    <ASubObject name ="anotherName">
      ...
    </ASubObject>
    <AnotherSubObject>
      <Measurement>
        <DataPoints>
          <Point  c="0"/>
          ...
          <Point  c="6.5" />
        </DataPoints>
      </Measurement>
    </AnotherSubObject>
</DataObject>
<DataObject name="aSecondName">
    <ASubObject name ="anotherName">
      ...
    </ASubObject>
    <AnotherSubObject>
      <Measurement>
        <DataPoints>
          <Point  c="0"/>
          ...
          <Point  c="9.5" />
        </DataPoints>
      </Measurement>
    </AnotherSubObject>
</DataObject>

Dann würde ich von jedem Element im XML-Dokument "DataObject" die Datenpunkte aus dem Bereich bekommen.
Also habe ich dann eine lange Liste von Datenpunkten wo ich ja nicht weiss von welchem "DataObject" die jeweiligen werte sind.


So nun meine Frage:
1. Wisst ihr wie ich mit XPath dieses Problem lösen könnte?
Ich stelle mir folgendes vor:
Suche für jedes XML-Element "DataObject" die Datenpunkte heraus.

Ich hoffe ihr versteht in etwa mein Problem und wisst worauf ich hinaus möchte :/
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Aufbauend auf deine Lösung: Ist es evtl. akzeptabel einfach beides zu selektieren (Also den DataObject Attribute und das Point Attibute?)
Java:
		expr = xpath.compile("//DataObject/@name | //Point[position() >= 2 and (position() <= 5)]/@c");
		Object result = expr.evaluate(doc, XPathConstants.NODESET);
		NodeList nodes = (NodeList) result;
		for (int i = 0; i < nodes.getLength(); i++) {
			Node n = nodes.item(i);
			System.out.println(n.getNodeName()+" "+n.getNodeValue());
		}
Sollte dann so etwas liefern wie
name aName
c 2.0
c 2.5
...
name ...
c ....
Dann könntest du eben anhand des Node-namens (getNodeName()) differenzieren.
Oder man selektiert nicht das Attribute vom DataObject, sondern das DataObject Node an sich, dann kann man über den NodeType (getNodeType) differenzieren....
Oder aber so etwas wie
Java:
		NodeList dataObjects = doc.getElementsByTagName("DataObject");
		for (int i = 0; i < dataObjects.getLength(); i++) {
			Element obj = (Element) dataObjects.item(i);
			System.out.println(obj.getAttribute("name"));
			NodeList points = obj.getElementsByTagName("Point");
			for (int j = 0; j < points.getLength(); j++) {
				Element point = (Element) points.item(j);
				System.out.println(point.getAttribute("c"));
			}
		}

wobei ..naja :)
 

redbomber

Bekanntes Mitglied
Hey, also erst einmal vielen vielen Dank!
Hat perfekt geklappt so wie du es vorgeschlagen hast.

Also die erste Variante ist auch das was ich brauche, da ich die "extraktion" der Daten komplett per XPath ausdrücken realisieren möchte. Die Idee ist meinen Code variable zu halten und dass nur von der Oberfläche aus ein solcher XPath erzeugt werden kann.

Jetzt habe ich aber doch noch eine Frage:

Und zwar kann ich mit dem Ausruck:
Java:
"//DataObject/@name | //Point[position() >= 2 and (position() <= 5)]/@c"

wie du beschrieben hast folgende Ausgabe generieren:
name aName
c 2.0
c 2.5
...
name ...
c ....

Jetzt versuche ich aber gerade einen Ausdruck zu erzeugen, bei den ich den Namen von "DataObject" angebe und wodurch ich NUR von diesem Element die Werte von "Point" erhalte. Natürlich ist dem Benutzer der Name von "DataObject" bekannt (sonst machts ja keinen Sinn).

Ich denke da an so etwas:
Java:
"/DataObject[@name='aName']/AnotherSubObject/Measurement/DataPoints/Point[position() >= 2 and (position() <= 5)]/@c"
was aber nicht funktioniert.
Also hiermit /DataObject[@name='aName'] denke ich auf das gewünschte "DataObject" zuzugreifen und mit der Erweiterung
AnotherSubObject/Measurement/DataPoints/Point[...]/@c" greife ich auf auf die gewünschten "Points" von eben nur diesem "DataObject" zu.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G XPATH-Frage XML & JSON 2
F XPath frage XML & JSON 4
B XPath frage XML & JSON 2
T Frage zu XQuery (XQJ) / XPath XML & JSON 2
G Frage zu XPath XML & JSON 2
Kirby.exe Probleme mit XML XPATH Select XML & JSON 3
B XPath soll XML liefern XML & JSON 7
O XPATH Problem - Anfänger XML & JSON 4
M dom4j unberechtigte Invalid XPath expression XML & JSON 12
W XPath schreiben XML & JSON 1
P HTML XPath XML & JSON 1
S Ersatz für die veraltete Klasse XPath XML & JSON 1
C XPath: Alle Kinder in einer Schleife auslesen XML & JSON 2
P Xpath zugriff auf Attribute XML & JSON 3
P "XPath is deprecated" XML eclipse XML & JSON 3
G HtmlUnit XPath XML & JSON 5
D XPath-Query XML & JSON 2
I XPath Namensräume und auslesen einzelner Knoten XML & JSON 3
AMStyles XPATH Befehl SVG Java XML & JSON 2
G xpath: in Kindelement zwei Attribut-Werte auslesen XML & JSON 2
G xpath: Inhalt eines Kindelements auslesen XML & JSON 2
H ChildNode via XPath ansprechen XML & JSON 2
G JDOM - aus Children-Liste ein Child direkt ansprechen ohne XPath? XML & JSON 9
S Attribute von Elementen auslesen mit XPath XML & JSON 2
T Xpath & JDOM Element Pfad ausgeben XML & JSON 2
W XPath + Inhalt aus <td> XML & JSON 2
reibi XPath XML & JSON 14
M xPath liefert leeres Nodeset XML & JSON 2
M Probleme mit XPath bei Java XML & JSON 5
W Element mit XPath @id ermitteln wenn nur ein teil der id bekannt ist XML & JSON 2
F XPath-Problem mit DOM4J XML & JSON 8
T XPath Problem: finden einer Node nach Attributswert XML & JSON 2
O XPATH gesucht XML & JSON 6
L Element manipulieren in einem DOMResult per XPath XML & JSON 10
P XPath und Namespaces XML & JSON 3
G XPath - replace function funktioniert nicht XML & JSON 3
E XPATH-Ausdruck mit not XML & JSON 4
E Wieso liefert dieser XPATH-Ausdruck nicht die richtige Anzahl Treffer? XML & JSON 8
M XPath Ausdruck validieren XML & JSON 2
N XPath Adressierung XML & JSON 7
B Optionaler XPath pfad XML & JSON 2
P XPath Problem XML & JSON 2
S Problem mit XPath XML & JSON 4
T Mit XPATH finden und dann änder XML & JSON 2
T EXSD auslesen mit XPath und JDOM XML & JSON 8
G XPath gesucht für Tag mit konkretem Content XML & JSON 2
A XPath Problem XML & JSON 2
C XPath in JDOM klappt nicht XML & JSON 2
T Prbolem XPath XML & JSON 2
X Xpath, alle Element die mit "user" beginnen auswäh XML & JSON 2
loadbrain XPath Problem XML & JSON 2
M brauche große XML-Datei für XPath-Tests XML & JSON 4
M JDOM und XPath, zu Element zugehörigen XPath-Ausdruck XML & JSON 5
F JDOM und XPath - Problem mit Namespace ohne Prefix XML & JSON 5
F hilfe bei xpath-ausdruck XML & JSON 2
K java + xpath -> performanceproblem XML & JSON 9
H Xpath kindelemente auslesen XML & JSON 2
S Xml zurück in xpath wandeln XML & JSON 8
flashfactor Filtern mittels XPATH XML & JSON 4
M XSL/XPath - Nur ersten Wert mit selben Attribut XML & JSON 4
M XPath Problem im Zusammenhang mit document() XML & JSON 2
M Frag zu xsl:when beziehungsweise XPath XML & JSON 3
F JDom und XPath XML & JSON 12
C xpath funktioniert nicht XML & JSON 5
M XPATH und RSS (Problem namespaces) XML & JSON 7
P nochmal XPath :-) XML & JSON 22
P XPath . XML & JSON 2
T Rekursiver Verzeichniss Baum in XML & XPath XML & JSON 4
clemson xpath mit jdom XML & JSON 2
Wildcard xpath Parser XML & JSON 8
W Design Frage zum Geld Protokoll des App Stores XML & JSON 0
K Frage zu der Ausgabe von XML Knotentypen XML & JSON 2
mananana Frage zu JSON XML & JSON 3
pkm Frage zu org.w3c.dom.Node.getNextSibling() und org.w3c.dom.Node.getNextChild() XML & JSON 1
F Frage zu XML Validation XML & JSON 5
B Frage zu Tree Traversal XML & JSON 2
L Frage zu ListViews XML & JSON 1
A Frage zu bestehender XML Datei XML & JSON 6
S XQuery - Frage zur Ausgabe XML & JSON 5
T Frage zu getContent unter jdom XML & JSON 6
K XSLT Frage XML & JSON 4
M Frage zu Erklärung im Online book "Java ist auch eine I XML & JSON 4
G web.xml frage XML & JSON 4
G Newbe - Frage.XML - Datei einlesen und speichern XML & JSON 2
T Newbie Frage. CSS Stylesheet einlesen und suchen nach Tags XML & JSON 6
O Frage zu JaxMe2! XML & JSON 3
E @pp workaround frage ;-) XML & JSON 3
T Newbie Frage.aus Java eine XML Datei erstellen? XML & JSON 7
Z Frage zu XML Schema XML & JSON 3
G Frage zu erreichen von Elementen XML & JSON 3
S [Frage] iterator bei jdom bricht ab XML & JSON 4

Ähnliche Java Themen

Neue Themen


Oben