2012-10-10 4 views
9
<person> 
<firstname> 
<lastname> 
<salary> 
</person> 

Dies ist das XML, das ich analysiere. Wenn ich den Druck der Knotennamen der untergeordneten Elemente von Person versuchen, ichgetNodeName() -Operation für einen XML-Knoten gibt #text zurück

Text

Vorname

Text

Nachname

Text

Gehalt

Wie beseitige ich #text generiert werden?

Update - Hier ist mein Code

try { 

    NodeList nl = null; 
    int l, i = 0; 
    File fXmlFile = new File("file.xml"); 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    dbFactory.setValidating(false); 
    dbFactory.setIgnoringElementContentWhitespace(true); 
    dbFactory.setNamespaceAware(true); 
    dbFactory.setIgnoringComments(true); 

    dbFactory.setCoalescing(true); 


    InputStream in; 
    in = new FileInputStream(fXmlFile); 
    Document doc = dBuilder.parse(in); 
    doc.getDocumentElement().normalize(); 
    Node n = doc.getDocumentElement(); 

    System.out.println(dbFactory.isIgnoringElementContentWhitespace()); 
    System.out.println(n); 

    if (n != null && n.hasChildNodes()) { 
     nl = n.getChildNodes(); 

     for (i = 0; i < nl.getLength(); i++) { 
      System.out.println(nl.item(i).getNodeName()); 
     } 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+2

Zeigen Sie Codierung .. – swemon

+0

Der Code wurde zur Verfügung gestellt. Bitte helfen Sie – coder

Antwort

5

setIgnoringElementContentWhitespace nur funktioniert, wenn Sie setValidating(true) verwenden, und nur dann, wenn die XML-Datei, die Sie Referenzen parsen eine DTD, die der Parser zu arbeiten, kann die whitespace- Nur Textknoten sind tatsächlich ignorierbar. Wenn Ihr Dokument keine DTD hat, irrt es auf der sicheren Seite und geht davon aus, dass keine Textknoten ignoriert werden können. Sie müssen also Ihren eigenen Code schreiben, um sie zu ignorieren, während Sie die untergeordneten Knoten durchlaufen.

+0

Vielen Dank für Ihre Antwort. Welche Methode ist vorzuziehen? Eine DTD schreiben oder eine Methode schreiben, um weiße Räume zu ignorieren? – coder

+2

Es ist nicht schwer, whitespace-only text nodes post-hoc (z. B. http://www.java.net/node/667186#comment-684625) zu entfernen und dies vermeidet die Notwendigkeit, die ursprüngliche XML-Datei zu ändern, um die DTD hinzuzufügen Referenz. –

+0

Das ist großartig! Danke vielmals! – coder

Verwandte Themen