XML Datei nach Fehler durchsuchen lassen

iDandy

Grünschnabel
Hallo zusammen,
und zwar habe ich folgendes Problem:
Ich habe mehrere XML Dateien in einem Ordner, die nach Fehler durchsucht werden sollen.
Als Beispiel:
XML Datei 1
<name>NAME</name> = richtig


XML Datei 2
<name></name> = falsch


und dieser "Fehler" soll mir von dem Programm, in welcher XML Datei er sich befindet, angezeigt werden.
Ich hoffe dass ich es euch verständlich genug erklärt habe und das ihr mir helfen könnt.

Danke bei allen im voraus!

iDandy
 

iDandy

Grünschnabel
Also bisher hab ich das so gemacht, aber ich bekomme nach dem Rootelement einen NullPointer.. wichtig ist dass mir die Werte untereinander ausgegeben werden.

Java:
import java.io.File;
import java.io.IOException;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.XMLOutputter;

class JDOMLesen {

  public static void main(String[] args) {


  File file = new File("C:\\test.xml");

  try {
  // Das Dokument einlesen
  SAXBuilder builder = new SAXBuilder();
  Document doc = builder.build(file);
  
  XMLOutputter fmt = new XMLOutputter();

  // komplettes Dokument ausgeben
  fmt.output(doc, System.out);

  // Wurzelelement ausgeben
  Element root = doc.getRootElement();
  System.out.println("Wurzelelement: " + root);

  // Wurzelelementnamen ausgeben
  System.out.println("Rootelement: " + root.getName());
  
  Element user = root.getChild("semiramis");
  System.out.println("Kind: " +root.getChild("semiramis"));
  
  Element device = user.getChild("ShippingOrder");
  System.out.println("Kind1: " + device);
  
  
  
  } catch (JDOMException e) {
  e.printStackTrace();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
}

UNd zwar sieht meine xml wie folgt aus:

Java:
<?xml version="1.0" encoding="UTF-8"?><semiramis xmlns="com.cisag.app.sales.obj.ShippingOrder" xsi:schemaLocation="com.cisag.app.sales.obj.ShippingOrder ShippingOrder.xsd" created="2016-05-24T07:14:10.309Z" locale="en-US-XMLSchemaCompliant" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" nlsMode="SINGLE_LANGUAGE" dateTimeMode="COMPACT">
  <ShippingOrder xmlns="com.cisag.app.sales.obj.ShippingOrder">
  <customerData>
  <CareOfPartner xsi:nil="true"/>
  <CustomerPartner>
  <number>136054</number>
  <name>J.N. OBERPAUR GMBH &amp; CO. KG</name>
  <organizationalUnit>
  <dunsNumber>136054</dunsNumber>
  <ilnNumber>4047599101103</ilnNumber>
  <imp_department/>
  </organizationalUnit>
  </CustomerPartner>
  </customerData>
  </ShippingOrder>
</semiramis>
 

melmager

Erfahrenes Mitglied
Code:
Element user = root.getChild("semiramis");
  System.out.println("Kind: " +root.getChild("semiramis"));

semiramis ist das root element darum geht der aufruf getChild natürlich nicht ....
 

iDandy

Grünschnabel
Java:
import java.io.File;
import java.io.IOException;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.XMLOutputter;

class JDOMLesen {

    public static void main(String[] args) {


        File file = new File("C:\\test.xml");

        try {
            // Das Dokument einlesen
            SAXBuilder builder = new SAXBuilder();
            Document doc = builder.build(file);
          
            XMLOutputter fmt = new XMLOutputter();

            // komplettes Dokument ausgeben
            fmt.output(doc, System.out);

            // Wurzelelement ausgeben
            Element root = doc.getRootElement();
            System.out.println("Wurzelelement: " + root);

            // Wurzelelementnamen ausgeben
            System.out.println("Rootelement: " + root.getName());
           
            Element user = root.getChild("name");
            System.out.println("Kind: " +root.getChild("name"));
          
        
           
          
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Ich hab das jetzt mal so umgeändert, aber dennoch bekomm ich immernoch diesen NullPointer

Java:
<?xml version="1.0" encoding="UTF-8"?>
<semiramis xmlns="com.cisag.app.sales.obj.ShippingOrder" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="com.cisag.app.sales.obj.ShippingOrder ShippingOrder.xsd" created="2016-05-24T07:14:10.309Z" locale="en-US-XMLSchemaCompliant" nlsMode="SINGLE_LANGUAGE" dateTimeMode="COMPACT">
  <ShippingOrder>
    <customerData>
      <CareOfPartner xsi:nil="true" />
      <CustomerPartner>
        <number>136054</number>
        <name>J.N. OBERPAUR GMBH &amp; CO. KG</name>
        <organizationalUnit>
          <dunsNumber>136054</dunsNumber>
          <ilnNumber>4047599101103</ilnNumber>
          <imp_department />
        </organizationalUnit>
      </CustomerPartner>
    </customerData>
  </ShippingOrder>
</semiramis>
Wurzelelement: [Element: <semiramis [Namespace: com.cisag.app.sales.obj.ShippingOrder]/>]
Rootelement: semiramis
Kind: null
Exception in thread "main" java.lang.NullPointerException
    at JDOMLesen.main(Main.java:39)
 

iDandy

Grünschnabel
ja aber ich versteh nicht so ganz wieso :) egal welche Vorgabe ich für .getChild treffe, sagt er mir immer dass kind: null ist...
aber die zuweisung findet ja statt und das Rootelement kann er sich ja auch aus der XML holen
 

iDandy

Grünschnabel
Java:
System.out.println("Wurzelelement: " + root);System.out.println("Rootelement: " + root.getName());System.out.println("Kind: " +root.getChild("name"));

irgendwie hab ich das Gefühl, dass er nicht die einzelnen Werte aus meiner XML lesen kann, weil wenn ich mti der Methode .getValue() arbeite, zeigt er mir die Werte als String an, also kann da doch irgendwas mit dem Zugriff nicht stimmen