XPath soll XML liefern

ballibum

Aktives Mitglied
Hallo Forum,

mit
Java:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(file);
       
        XPathFactory xpf = XPathFactory.newInstance();
        XPath xpath = xpf.newXPath();

lege ich die Grundlagen zum Auswerten eines XML Dokumentes. Nun hole ich mir mit
Java:
NodeList nl = (NodeList) xpath.evaluate("//Address", doc, XPathConstants.NODESET);
Alle Adressen aus dem Beispiel und kann diese mit

Java:
for (int i = 0; i < nl.getLength(); i++) {
            System.out.println(i);
            System.out.println(nl.item(i).getNodeName());
            System.out.println(nl.item(i).getChildNodes());
            NodeList children = nl.item(i).getChildNodes();
            System.out.println(nl.item(i).getTextContent());
        }

auswerten, das macht aber irgendwie nur Ärger, gerade wenn, anders als im Beispiel, eine tiefere und unstrukturiertere Verschachtelung anfällt.

Daher würde ich gerne keine NodeList zurück bekommen wollen, sondern erneut XML-Code um diesen dann wieder mit den gängigen XPaths auswerten zu können. Daher meine Frage wie kriege ich xpath.evaluate dazu mir XML zurückzugeben?

beste Grüße
Balli
 

Flown

Administrator
Mitarbeiter
xpath.evaluate(".//Subelem/text()", /* Startpunkt */ nl.item(i), XPathConstants.STRING)

XML wird hier nicht zurückgegeben, sondern der DOM-Tree wird durchlaufen.

Mit Bsp. und konkretem Problem könnte man dir konkreter helfen!
 

ballibum

Aktives Mitglied
Hi,
ein Beispiel ist oben verlinkt.

Wenn ich mir da über
Code:
NodeList nl = (NodeList) xpath.evaluate("//Address", doc, XPathConstants.NODESET);
die Address-Geschichten:
Code:
<Address Type="Shipping"> 
    <Name>Ellen Adams</Name> 
    <Street>123 Maple Street</Street> 
    <City>Mill Valley</City> 
    <State>CA</State> 
    <Zip>10999</Zip> 
    <Country>USA</Country> 
  </Address>

hole kann ich nicht mehr über XPaths (weil ich kein XML erhalte) auf die Inhalte zurückgreifen. Sondern muss den Weg über:
Java:
for (int i = 0; i < nl.getLength(); i++) {
           System.out.println(nl.item(i).getNodeName());
           System.out.println(nl.item(i).getTextContent());
}
gehen. Bei so einem einfachen Beispiel ist das kein Problem, jedoch habe ich im realen Leben deutlich verschachtelte Elemente (stark vereinfachtes Beispiel):
Code:
<gmd:CI_ResponsibleParty>
      <gmd:organisationName>
        <gco:CharacterString>Name</gco:CharacterString>
      </gmd:organisationName>
      <gmd:contactInfo>
        <gmd:CI_Contact>
          <gmd:address>
            <gmd:CI_Address>
              <gmd:electronicMailAddress>
                <gco:CharacterString>name@adresse.de</gco:CharacterString>
              </gmd:electronicMailAddress>
            </gmd:CI_Address>
          </gmd:address>
        </gmd:CI_Contact>
      </gmd:contactInfo>
      <gmd:role>
        <gmd:CI_RoleCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/ML_gmxCodelists.xml#CI_RoleCode" codeListValue="pointOfContact" />
      </gmd:role>
    </gmd:CI_ResponsibleParty>

Um hier schneller an die benötigten Werte zu gelangen, wäre es schön, wenn ich hier wieder die XPath-Funktionen anwenden könnte. Um an die e-Mailadresse zu gelangen ist es sonst echt steinig und ebenso an den codeListValue "pointOfContact".

mit bestem Gruß
 

Flown

Administrator
Mitarbeiter
XPath1: //address//electronicMailAddress/*/text()
XPath2: //CI_RoleCode/@codeListValue
(Natürlich um die NS erweitern)
 

Flown

Administrator
Mitarbeiter
Wie ich bereits sagte du erhälst einen DOM Node und kannst weiterarbeiten. Zu Punkt 1:
Java:
NodeList nl = (NodeList) xpath.evaluate("//Address", doc, XPathConstants.NODESET);
for (int i = 0; i < nl.getLength(); i++) {
  Node address = nl.item(i);
  System.out.println(xPath.evaluate("./Name/text()", address, XPathConstants.STRING));
}
 

ballibum

Aktives Mitglied
Super, vielen Dank - so klappt es natürlich genauso.

Achtung: Lösung entspricht nicht der originären Frage, ist aber vermutlich deutlich praktikabler und für meine Zwecke ein Traum!
 

ballibum

Aktives Mitglied
Perfekt auf jeden Fall, aber du hattest geschrieben, das ich ein DOM-Objekt bekomme und kein reines XML-doc. Wie dem auch sei, ich finde die Lösung deutlich besser als meinen originären Plan.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe Probleme mit XML XPATH Select XML & JSON 3
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
R XPath - frage zur Adressierung XML & JSON 3
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
G XPATH-Frage XML & JSON 2
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
F XPath frage XML & JSON 4
B Optionaler XPath pfad XML & JSON 2
B XPath frage XML & JSON 2
T Frage zu XQuery (XQJ) / XPath 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
G Frage zu XPath XML & JSON 2
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
G XSL-Transformation erzeugt Output obwohl keiner erzeugt werden soll XML & JSON 10
0x7F800000 jdom mit xml.transform inkompatibel, was soll ich nehmen? XML & JSON 2
V Wie soll ich vorgehen? (XML -> neu anordnen -> XML) XML & JSON 3

Ähnliche Java Themen

Neue Themen


Oben