Bestimmte Werte eine XML-Datei ausgeben.

Henri

Bekanntes Mitglied
Hallo leute,

ich möchte bestimmte Werte(Filename, Beschreibung, Name und ID2) eine XML-Datei ausgeben, diese Code gibt mir alle Werte Zurück, noch kompliziert kommt die Attribut "Name" 2 mal vor, ich möchte die erste Attribut-Name
kann jemandem hier mir vielleicht helfen. Vielen Dank im Voraus.
Die XML-Datei sieht so aus


XML:
<?xml version="1.0" encoding="utf-8"?>
<FotoMetaData  xmlns:xsd="[URL]http://www.w3.org/2001/XMLSchema[/URL]">
   <DateTaken>2015-04-06T21:26:09</DateTaken>
   <DateAdded>2015-04-30T09:53:45</DateAdded>
   <FotoHight>117</FotoHight>
   <FotoWidth>208</FotoWidth>
   <Latitude>52.1834602355957</Latitude>
   <Longitude>7.0288</Longitude>
   <Filename>image.jpg</Filename>
   <ContentType>application/json;charset=UTF-8</ContentType>
   <Beschreibung>Becher</Beschreibung>
   <Erfasser>
       <ID>1</ID>
       <Name>Paul</Name>
   </Erfasser>
   <BereichID>1</BereichID>
   <Vorhaben>
       <ID2>122121</ID2>
       <Bezeichnung>platz</Bezeichnung>
       <leiten>
           <ID>1078</ID>
           <Name>Hit</Name>
       </leiten>
   </Vorhaben>
</FotoMetaData>


Java:
import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XmlReadWriteImport {

   public static void main(String argv[]) {
       try {
           File file = new File("C:/Users/Desktop/1381.xml");
           DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

           Document doc = dBuilder.parse(file);

           if (doc.hasChildNodes()) {
               printNote(doc.getChildNodes());
           }
       } catch (Exception e) {
           System.out.println(e.getMessage());
       }
   }

   private static void printNote(NodeList nodeList) {
       for (int count = 0; count < nodeList.getLength(); count++) {
           Node tempNode = nodeList.item(count);
  
           if (tempNode.getNodeType() == Node.ELEMENT_NODE) {
               System.out.println("Node Value =" + tempNode.getTextContent());
               if (tempNode.hasAttributes()) {
                   NamedNodeMap nodeMap = tempNode.getAttributes();
               }
           }
       }
   }
}
 
Zuletzt bearbeitet von einem Moderator:
Mit der tempNode.getTextContent() gebe ich alle werte aus, wie kann ich diese Werte in einem Array oder Arraylist hinzufügen
 
Ich würd das mit XPath machen und hier sind die Pfade dazu:
Java:
"/FotoMetaData/Vorhaben/ID2"
"/FotoMetaData/Erfasser/Name"
"/FotoMetaData/Beschreibung"
"/FotoMetaData/Filename"
 
So hier ein Beispiel:
Java:
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.*;
import java.io.IOException;
import java.io.StringReader;
import java.util.Arrays;

public class Test {
  public static void main(String... args) {
    String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
      "<FotoMetaData  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" +
      "   <DateTaken>2015-04-06T21:26:09</DateTaken>\n" +
      "   <DateAdded>2015-04-30T09:53:45</DateAdded>\n" +
      "   <FotoHight>117</FotoHight>\n" +
      "   <FotoWidth>208</FotoWidth>\n" +
      "   <Latitude>52.1834602355957</Latitude>\n" +
      "   <Longitude>7.0288</Longitude>\n" +
      "   <Filename>image.jpg</Filename>\n" +
      "   <ContentType>application/json;charset=UTF-8</ContentType>\n" +
      "   <Beschreibung>Becher</Beschreibung>\n" +
      "   <Erfasser>\n" +
      "       <ID>1</ID>\n" +
      "       <Name>Paul</Name>\n" +
      "   </Erfasser>\n" +
      "   <BereichID>1</BereichID>\n" +
      "   <Vorhaben>\n" +
      "       <ID2>122121</ID2>\n" +
      "       <Bezeichnung>platz</Bezeichnung>\n" +
      "       <leiten>\n" +
      "           <ID>1078</ID>\n" +
      "           <Name>Hit</Name>\n" +
      "       </leiten>\n" +
      "   </Vorhaben>\n" +
      "</FotoMetaData>";
    try {
      DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder documentBuilder = null;
      documentBuilder = documentBuilderFactory.newDocumentBuilder();
      Document document = documentBuilder.parse(new InputSource(new StringReader(xml)));

      XPathFactory xPathFactory = XPathFactory.newInstance();
      XPath xPath = xPathFactory.newXPath();
      Node filename = (Node) xPath.evaluate("//Filename", document, XPathConstants.NODE);
      Node description = (Node) xPath.evaluate("//Beschreibung", document, XPathConstants.NODE);
      Node name = (Node) xPath.evaluate("//Erfasser/Name", document, XPathConstants.NODE);
      Node id2 = (Node) xPath.evaluate("//ID2", document, XPathConstants.NODE);

      for(Node node : Arrays.asList(filename, description, name, id2)) {
        System.out.println(node.getNodeName() + " - " + node.getTextContent());
      }

    } catch (ParserConfigurationException | IOException | SAXException | XPathExpressionException e) {
      e.printStackTrace();
    }
  }
}
 
So hier ein Beispiel:
Java:
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.*;
import java.io.IOException;
import java.io.StringReader;
import java.util.Arrays;

public class Test {
  public static void main(String... args) {
    String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
      "<FotoMetaData  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" +
      "   <DateTaken>2015-04-06T21:26:09</DateTaken>\n" +
      "   <DateAdded>2015-04-30T09:53:45</DateAdded>\n" +
      "   <FotoHight>117</FotoHight>\n" +
      "   <FotoWidth>208</FotoWidth>\n" +
      "   <Latitude>52.1834602355957</Latitude>\n" +
      "   <Longitude>7.0288</Longitude>\n" +
      "   <Filename>image.jpg</Filename>\n" +
      "   <ContentType>application/json;charset=UTF-8</ContentType>\n" +
      "   <Beschreibung>Becher</Beschreibung>\n" +
      "   <Erfasser>\n" +
      "       <ID>1</ID>\n" +
      "       <Name>Paul</Name>\n" +
      "   </Erfasser>\n" +
      "   <BereichID>1</BereichID>\n" +
      "   <Vorhaben>\n" +
      "       <ID2>122121</ID2>\n" +
      "       <Bezeichnung>platz</Bezeichnung>\n" +
      "       <leiten>\n" +
      "           <ID>1078</ID>\n" +
      "           <Name>Hit</Name>\n" +
      "       </leiten>\n" +
      "   </Vorhaben>\n" +
      "</FotoMetaData>";
    try {
      DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder documentBuilder = null;
      documentBuilder = documentBuilderFactory.newDocumentBuilder();
      Document document = documentBuilder.parse(new InputSource(new StringReader(xml)));

      XPathFactory xPathFactory = XPathFactory.newInstance();
      XPath xPath = xPathFactory.newXPath();
      Node filename = (Node) xPath.evaluate("//Filename", document, XPathConstants.NODE);
      Node description = (Node) xPath.evaluate("//Beschreibung", document, XPathConstants.NODE);
      Node name = (Node) xPath.evaluate("//Erfasser/Name", document, XPathConstants.NODE);
      Node id2 = (Node) xPath.evaluate("//ID2", document, XPathConstants.NODE);

      for(Node node : Arrays.asList(filename, description, name, id2)) {
        System.out.println(node.getNodeName() + " - " + node.getTextContent());
      }

    } catch (ParserConfigurationException | IOException | SAXException | XPathExpressionException e) {
      e.printStackTrace();
    }
  }
}

Vielen Dank
 

Neue Themen


Zurück
Oben