java - DOM Parser wrong childNodes Count
xml xsd (2)
Bueno, hay 13 hijos si se incluyen nodos de texto en blanco, pero solo 6 si se eliminan los nodos de texto en blanco. Entonces, hay alguna diferencia en la forma en que el árbol se ha construido entre los dos casos, eso afecta si los nodos de texto en espacio en blanco se conservan o no.
Esto es extraño, pero déjame intentarlo lo mejor posible.
Tengo un XML que estoy leyendo de forma normal desde el escritorio y lo analizo a través del analizador DOM.
<?xml version="1.0" encoding="UTF-8"?>
<Abase
xmlns="www.abc.com/Events/Abase.xsd">
<FVer>0</FVer>
<DV>abc App</DV>
<DP>abc Wallet</DP>
<Dversion>11</Dversion>
<sigID>Ss22</sigID>
<activity>Adding New cake</activity>
</Abase>
Leyendo el XML para obtener los niños.
Document doc = docBuilder.parse("C://Users//Desktop//abc.xml");
Node root = doc.getElementsByTagName("Abase").item(0);
NodeList listOfNodes = root.getChildNodes(); //Sysout Prints 13
Así que aquí mi lógica funciona bien. Cuando trato de hacerlo presionando el mismo XML en una cola y leerlo y obtener los nodos secundarios, me da no. de nodos hijo es 6.
Document doc=docBuilder.parse(new InputSource(new ByteArrayInputStream(msg.getBytes("UTF-8"))));
Node root = doc.getElementsByTagName("Abase").item(0);
NodeList listOfNodes = root.getChildNodes(); //Sysout Prints 6
esto atornilla mi lógica de analizar XML. ¿Alguien puede ayudarme?
ACTUALIZAR
Agregar lógica de envío:
javax.jms.TextMessage tmsg = session.createTextMessage();
tmsg.setText(inp);
sender.send(tmsg);
PROBLEMA Si leo este xml desde el escritorio, dice 13 childs, 6 element node y 7 nodos de texto. La lógica común es:
- Lea todos los elementos secundarios y repita la lista de elementos secundarios.
- Si el nodo nodo de texto ISNOT ingresa dentro del bloque, agregue un elemento padre con dos secundarios y anexe a la ROOT existente. Luego obtenga NodeName y obtenga TextContext entre el nodo del elemento y empújelos como setTextContext para ambos childs, respectivamente.
- Así que ahora tengo un NODO DE ELEMENTO nuevo que tiene dos hijos. Y como no necesito el nodo de elementos ya existente que todavía son los hijos de root, finalmente los estoy eliminando.
Así que la lógica anterior está totalmente jodida si presiono el XML para que haga cola y lo explico por hacer la misma lógica.
OUTPUT XML que está saliendo bien cuando leo desde el escritorio, pero leer desde la cola está teniendo problemas, porque atornilla el árbol completo.
<Abase
xmlns="www.abc.com/Events/Abase.xsd">
<Prop>
<propName>FVer</propName>
<propName>0</propName> //similarly for other nodes
</Prop>
</Abase>
Gracias
El documento en "XML de salida" significa que hay algo mal en el lado del remitente. Supongo que por eso inp
no es un String
sino un tipo de objeto y setText(inp)
no llama a inp.toString()
pero en su lugar desencadena algún tipo de código de serialización que produce este extraño XML que estás viendo.