recorrer que por poner obtener nodos mostrar hijos estilo elemento con cambiar body java xml dom

por - que es el id en javascript



¿Por qué obtengo nodos de texto adicionales como nodos secundarios de nodo raíz? (1)

Quiero imprimir los elementos secundarios del nodo raíz. Este es mi archivo XML.

<?xml version="1.0"?> <!-- Hi --> <company> <staff id="1001"> <firstname>yong</firstname> <lastname>mook kim</lastname> <nickname>mkyong</nickname> < salary>100000</salary> </staff> <staff id="2001"> <firstname>low</firstname> <lastname>yin fong</lastname> <nickname>fong fong</nickname> <salary>200000</salary> </staff> </company>

Según mi entendimiento, el nodo raíz es "compañía" y sus nodos secundarios deben ser "personal" y "personal" (ya que hay nodos de "personal" 2 veces). Pero cuando trato de pasarlos a través de mi código Java, obtengo 5 nodos secundarios. ¿De dónde vienen los 3 nodos de texto extra?

Código Java:

package com.training.xml; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class ReadingXML { public static void main(String[] args) { try { File file=new File("D://TestFile.xml"); DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder=dbFactory.newDocumentBuilder(); Document document=dBuilder.parse(file); document.getDocumentElement().normalize(); System.out.println("root element: "+document.getDocumentElement().getNodeName()); Node rootNode=document.getDocumentElement(); //saving root node in a variable. System.out.println("root: "+rootNode.getNodeName()); NodeList nList=rootNode.getChildNodes(); //to store the child nodes as node list. for(int i=0;i<nList.getLength();i++) { System.out.println("node name: "+nList.item(i).getNodeName() ); } } catch(Exception e) { e.printStackTrace(); } }

}

SALIDA:

root element: company root: company node name: #text node name: staff node name: #text node name: staff node name: #text

¿Por qué los tres nodos de texto vienen aquí?


¿Por qué los tres nodos de texto vienen aquí?

Son los espacios en blanco entre los elementos hijos. Si solo desea los elementos secundarios, solo debe ignorar los nodos de otros tipos:

for (int i = 0;i < nList.getLength(); i++) { Node node = nList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { System.out.println("node name: " + node.getNodeName()); } }

O puedes cambiar tu documento para no tener ese espacio en blanco.

O podría usar una API XML diferente que le permita solicitar fácilmente solo elementos. (La API DOM es un problema de varias maneras).

Si solo desea ignorar el espacio en blanco del contenido del elemento, puede usar Text.isElementContentWhitespace .