XML schaffe es nicht Nodes auszulesen

akchill

Mitglied
Hallo zusammen,

ich verzweifel ich habe folgende XML Datei:

[xml]<Order>
<order xmlns="shop.enfinity/order-1.0" refid="12">
<items>
<item refid="12">
<item-ref-id>12</item-ref-id>
<refid>84</refid>
<product-name>hemd</product-name>
<sku>??</sku>
<tity>1</tity>
<unit-price>
<money currency="EUR">8.9</money>
</unit-price>
<net-price>
<money currency="EUR">8.9</money>
</net-price>
<tax>
<money currency="EUR">0</money>
</tax>
<hemd>
<stoff>
<name>azur</name>
<artikelnummer>5</artikelnummer>
</stoff>
<modell>
<kragen>kent</kragen>
<form>Slim</form>
<allaenge>Normal</allaenge>
<tasche>Knopf</tasche>
<manschette>2 Knopf</manschette>
</modell>
<extras>
<monogram>
<text>C</text>
<positionierungen>
<!-- 0 .. n -->
<position>Tasche</position>
</positionierungen>
</monogram>
<ausstattung>
<!-- 0 .. n -->
<extra>Perlmuttknöpfe</extra>
<extra>Weißer Kragen / weiße Manschetten</extra>
</ausstattung>
</extras>
<vermessung>
<typ>Hemd</typ> <!-- Hemd / Körper / Standard-->
<kragenmass>20,5</kragenmass>
<brustmass>20,5</brustmass>
<bauchmass>20,5</bauchmass>
<schultermass>20,5</schultermass>
<aermelmass>20,5</aermelmass>
<hemdmass>20,5</hemdmass>
</vermessung>
</hemd>
</item>
</items>
</order>
</ExportedOrders>[/xml]


so Jetzt schaffe ich es auf diesen Node zuzugreifen mit folgender scheiß Logik(syr für das Wort)

Java:
File file = new File("export.xml");
  
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = dbf.newDocumentBuilder();
  Document doc = db.parse(file);
  doc.getDocumentElement().normalize();
  System.out.println("Root element " + doc.getDocumentElement().getNodeName());
  NodeList list = doc.getDocumentElement().getChildNodes();
  NodeList list2 = list.item(1).getChildNodes();
  NodeList list3 = list2.item(1).getChildNodes();
  NodeList list4 = list3.item(1).getChildNodes();
  System.out.println(list4.getLength());
  System.out.println(list4.item(12));


Leider kommt bei mir folgende Ausgabe :

Root element ExportedOrders
19 (länge der Childnode)

aber wenn ich eins von den auslesen will kommt sowas

Code:
[#text: 
				]

oder sowas 

[item-ref-id: null]


Also ich komm schon irgendwie auf die Nodes aber ich schaff es nicht sie richtig auszulesen, wenn ihr anmerkungen habt immer her damit🙂

Liebe Grüße und schönes WE!
 
Zuletzt bearbeitet von einem Moderator:
Generell kommen immer ein oder mehrere Text-Nodes. Diese haben auch den NodeType = Text. Diese kannst du einfach überspringen und den nächsten Node nehmen.

Kannst dir aber mal Lycia (siehe Sig) ansehen, falls du nur einen Teil der Werte braucht reicht das vllt.
 
Also habe jetzt auch mal eine DTD Datei angelegt.

[XML]<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT ExportedOrders (order*)>
<!ELEMENT order (product-line-items*)>
<!ATTLIST order
xmlns CDATA #REQUIRED
refid CDATA #REQUIRED
>
<!ELEMENT product-line-items (product-line-item+)>
<!ATTLIST product-line-item
refid CDATA #REQUIRED
>
<!ELEMENT product-line-item (origin-line-item-ref-id, product-refid, product-name, product-sku, quantity, unit-price*, net-price*, tax*, masshemd*)>
<!ELEMENT unit-price (money)>
<!ELEMENT net-price (money)>
<!ELEMENT tax (money)>
<!ELEMENT masshemd (stoff*, modell*, extras*, vermessung*)>
<!ELEMENT stoff (name, artikelnummer)>
<!ELEMENT modell (kragen, rumpfform, aermellaenge, brusttasche, manschette)>
<!ELEMENT extras (monogram*, ausstattung*)>
<!ELEMENT vermessung (typ, kragenmass, brustmass, bauchmass, schultermass, aermelmass, hemdmass)>
<!ELEMENT monogram (text, positionierungen*)>
<!ELEMENT ausstattung (extra+)>
<!ELEMENT positionierungen (position)>
[/XML]

Meine XML sieht so aus

[XML]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE literature SYSTEM "Masshemd.dtd">
<ExportedOrders>
<order xmlns="intershop.enfinity/order-1.0" refid="12709491308174688">
<product-line-items>
<product-line-item refid="1142">
<origin-line-item-ref-id>16284808</origin-line-item-ref-id>
<product-refid>3067984</product-refid>
<product-name>hemd</product-name>
<product-sku>??</product-sku>
<quantity>1</quantity>
<unit-price>
<money currency="EUR">9.9</money>
</unit-price>
<net-price>
<money currency="EUR">9.9</money>
</net-price>
<tax>
<money currency="EUR">0</money>
</tax>
<masshemd>
<stoff>
<name>Uni Popeline / Uni / azur</name>
<artikelnummer>0835</artikelnummer>
</stoff>
<modell>
<kragen>kent</kragen>
<rumpfform>Slim</rumpfform>
<aermellaenge>Normal</aermellaenge>
<brusttasche>Mit Tasche und Knopf</brusttasche>
<manschette>2 Knopf</manschette>
</modell>
<extras>
<monogram>
<text>AB</text>
<positionierungen>
<!-- 0 .. n -->
<position>Auf der Tasche</position>
</positionierungen>
</monogram>
<ausstattung>
<!-- 0 .. n -->
<extra>Perlmuttknöpfe</extra>
<extra>Weißer Kragen / weiße Manschetten</extra>
</ausstattung>
</extras>
<vermessung>
<typ>Hemd</typ> <!-- Hemd / Körper / Standard-->
<kragenmass>20,5</kragenmass>
<brustmass>20,5</brustmass>
<bauchmass>20,5</bauchmass>
<schultermass>20,5</schultermass>
<aermelmass>20,5</aermelmass>
<hemdmass>20,5</hemdmass>
</vermessung>
</masshemd>
</product-line-item>
</product-line-items>
</order>
</ExportedOrders>
[/XML]

könnt ihr mal schauen ob dies so richtig ist? Bitte...

Wenn ich folgendes dann ausführe:

z.b.

System.out.println(doc.getDocumentElement().getElementsByTagName("position").item(0));

kommt das raus :

[position: null]

aber das ist doch nicht richtig😉... ich verstehe es nicht...

liebe grüße!
 
Steht doch oben. Das erste Child ist ein #TEXT-Node. Je nach VM-Typ können es auch mehrere sein. Z.B. bei der IBM-JVM. Dir bleibt keine andere Wahl, als alle Childs durchzugehen.
 
Also ich komm schon irgendwie auf die Nodes aber ich schaff es nicht sie richtig auszulesen, wenn ihr anmerkungen habt immer her damit🙂
versuche es mit XPath:

Java:
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nl = (NodeList)xpath.evaluate("//position/text()", document, XPathConstants.NODESET);

So muss eine Liste von Textknoten herauskommen, für jeden "position" Knoten.

Slawa
 

Zurück
Oben