# Comments in XML parsen



## Jarlaxle (6. Apr 2011)

Hallo zusammen,

ich habe folgendes Problem: Ich versuche Comments aus einer XML-Datei auszulesen.
Die Tags auszulesen ist kein Problem aber ich habe leider keine Idee wie ich an die Comments rankomme.

xml-Datei:
<?xml version="1.0" encoding="UTF-8"?>

<document>
  <ordernumbers>
    <ordernumber>943 733-102</ordernumber>  <!--MB-2T-->
    <configurations>
      <regex-match>MM20-............</regex-match>  <!--MS20-->
    </configurations>      
  </ordernumbers>
</document>


```
JFileChooser fc = new JFileChooser();
        // Auswahl des Verzeichnisses
        fc.setCurrentDirectory(null);
        // Mehrfach-Selektion abschalten
        fc.setMultiSelectionEnabled(false);
        // die Auswahl 'Alle Dateien anzeigen' abschalten
        fc.setAcceptAllFileFilterUsed(false);
        // FileFilter hinzufügen
        fc.addChoosableFileFilter(new MyFilter("pdf","PDFs"));
        // Dialog öffnen
        int my_file = fc.showOpenDialog(this);
        // prüfen, ob Datei gewählt wurde
        if (my_file == JFileChooser.APPROVE_OPTION){
            // Datei im Textfeld einblenden
            textfield_Datei.setText(fc.getSelectedFile().toString());
            if (checkbox_pdf.isSelected() == true){
                try {
                    Runtime.getRuntime().exec("cmd.exe /c start /b " + fc.getSelectedFile().toString());
                } catch (IOException ex) {
                    Logger.getLogger(XMLGUI.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

            // Dateiendung umwandeln
            String myXMLDatei = fc.getSelectedFile().toString();
            myXMLDatei = myXMLDatei.substring(0,myXMLDatei.length()-3);
            myXMLDatei = myXMLDatei + "xml";

            try{
                File myDatei = new File(myXMLDatei);
                boolean b;
                b = myDatei.isFile();
                if (b == true){

                    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                    dbf.setValidating(false);
                    DocumentBuilder db = dbf.newDocumentBuilder();
                    Document doc = db.parse(myDatei);
                    doc.getDocumentElement().normalize();

                    NodeList node_configurations = doc.getElementsByTagName("configurations");
                    NodeList node_ordernumbers = doc.getElementsByTagName("ordernumbers");


                    Node configurationNode = node_configurations.item(0);
                    if (configurationNode.getNodeType() == Node.ELEMENT_NODE){
                        Element configurationElmnt = (Element) configurationNode;

                        NodeList configurationNmElmntLst = configurationElmnt.getElementsByTagName("regex-match");
                        // NodeList configurationNmElmntLst = configurationElmnt.getChildNodes();
                        int test = configurationNmElmntLst.getLength();
                        for (int i=0; i < configurationNmElmntLst.getLength(); i++){
                            Element configurationNmElmnt = (Element) configurationNmElmntLst.item(i);
                            NodeList configurationNm = configurationNmElmnt.getChildNodes();
                            TextArea_Produkte.insert(configurationNm.item(0).getNodeValue() + "\n", 0);
                        }
                    }
                    else{
                        // nothing TODO
                    }

                    Node ordernumbersNode = node_ordernumbers.item(0);
                    if (ordernumbersNode.getNodeType() == Node.ELEMENT_NODE){
                        Element ordernumbersElmnt = (Element) ordernumbersNode;
                        
                        NodeList ordernumbersNmElmntLst = ordernumbersElmnt.getElementsByTagName("ordernumber");

                        for (int i=0; i < ordernumbersNmElmntLst.getLength(); i++){
                            Element ordernumbersNmElmnt = (Element) ordernumbersNmElmntLst.item(i);
                            NodeList ordernumbersNm = ordernumbersNmElmnt.getChildNodes();
                            TextArea_Order.insert(ordernumbersNm.item(0).getNodeValue() + "\n", 0);
                        }
                    }
                    else{
                        // nothing TODO
                    }                    

                }
                else{
                    myDatei.createNewFile();
                }
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }
        else{
            textfield_Datei.setText("keine Datei ausgewählt!");
        }
```

habe es schon versucht mit 
Comment comment = (Comment) ordernumbersNmElmntLst.item(0);
und einiges mehr.
Ich weiss nun einfach nicht mehr weiter. ???:L

Ich nutz Netbeans 6.9.1 unter Win7(32bit)

Kann mir jemand helfen?

Gruss
Jarlaxle


----------



## Murray (6. Apr 2011)

Jarlaxle hat gesagt.:


> habe es schon versucht mit
> Comment comment = (Comment) ordernumbersNmElmntLst.item(0);
> und einiges mehr.


Das kann ja nicht gehen, weil der Kommentar nicht innerhalb des ordernumber-Elements steht, sondern irgendwo dahinter auf der gleichen Ebene (also ebenfalls als direkter Child-Node von ordernumber*s*)


----------



## Jarlaxle (6. Apr 2011)

das heisst es ist nicht möglich die comments auszulesen?


----------



## Noctarius (6. Apr 2011)

```
final DocumentBuilderFactory factory = DocumentBuilderFactory
				.newInstance();

// setting options for clean parsing
factory.setIgnoringComments(false);
factory.setIgnoringElementContentWhitespace(false);
```

Und dann die children von eldingsda-Element durchgehen und schauen ob der NodeType entsprechend Node.CommentNode oder sowas ist. Ein Blick ins Javadoc sollte die Lösung bringen.


----------

