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

Este es el XML que estoy analizando. Cuando intento imprimir los nombres de los nodos de elementos secundarios de la persona, me saleoperación getNodeName() en un nodo XML devuelve #text

texto

apellido

texto

apellido

texto

salario

¿Cómo elimino #text siendo generado?

Actualización - Aquí está mi código

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

Muestre la codificación .. – swemon

+0

El código ha sido proporcionado. Por favor, ayuda – coder

Respuesta

5

setIgnoringElementContentWhitespace sólo funciona si se utiliza setValidating(true), y sólo si el archivo XML que está analizando las referencias de una DTD que el analizador se puede utilizar para averiguar qué whitespace- solo los nodos de texto son realmente ignorables. Si su documento no tiene una DTD, se equivoca y supone que no se pueden ignorar los nodos de texto, por lo que tendrá que escribir su propio código para ignorarlos a medida que atraviesa los nodos secundarios.

+0

Muchas gracias por su respuesta. ¿Qué método es preferible? ¿Escribir un DTD o escribir un método para ignorar los espacios en blanco? – coder

+2

No es difícil eliminar los nodos de texto de espacio en blanco post-hoc (por ejemplo, http://www.java.net/node/667186#comment-684625) y esto evita la necesidad de modificar el archivo XML original para agregar el DTD referencia. –

+0

¡Esto es asombroso! ¡Muchas gracias! – coder

Cuestiones relacionadas