2016-06-02 12 views
0

Ich möchte ein XML-Dokument analysieren und in JSON konvertieren. Ich habe ein Problem bei der Suche, welcher Knoten Kind hat und welche nicht.Wie finde ich den Knoten, der Kind-Knoten beim Parsing XML-Datei mit DOM-Parser in Java

Beispiel:

<Bank> 
    <Account> 
     <Id>1001</Id> 
     <Name>Jack Robinson</Name> 
     <Amt>10000</Amt> 
    </Account> 
</Bank> 

In dieser XML-Datei, ich ein untergeordnetes Element finden wollen erste Bank Knoten hat das heißt Konto, das gleiche wie Konto Knoten Kindknoten heißt ID, Name, Amt. Aber Id, Name und Amt-Knoten hat keine Childs, also möchte ich wie das, welcher Knoten hat Kind Kind und welche Knoten nicht?

Ich versuche mit node.hasChildNodes() Methode, aber es wird True für jeden Knoten zurückgegeben.

Bitte helfen Sie mir, dieses Problem zu lösen ...

Antwort

0

node.hasChildNodes() gibt true zurück, weil sie findet, das leere Textelement als Kind.
So in Ihrem Fall Bank hat Kind leeren Text und dann Konto.
Eine Lösung besteht darin, die Formatierungselemente aus dem XML zu entfernen und anschließend zu analysieren. Sie können überprüfen, ob ein Knoten ein leerer Text oder ein Elementknoten ist, indem Sie node.getNodeType() == Node.ELEMENT_NODE verwenden.

+0

ja richtig. kannst du mir helfen, xml whitespaces zu entfernen? – ketan

+0

Sie können ** node.normalize() ** aufrufen, bevor Sie auf untergeordnete Knoten testen. Eine andere Lösung wäre, ** node.getChildNodes() ** aufzurufen und zu prüfen, ob einer der zurückgegebenen Knoten vom Typ Node.ELEMENT_NODE ist. Beide Fälle funktionieren. – Kalam

+0

Danke, Bruder. Es funktioniert großartig. nur ein Problem, auf das ich in ist, ist, wie das Element zu ende ist, dh in diesem Fall ist End-Tag und ich möchte dieses Ende-Tag zu identifizieren, so dass ich JSON-Ende-Objekt schreiben kann ... Gib mir einen Hinweis oder dergleichen Lösung? – ketan

0

Sie können versuchen,

NodeList iDNodes = (Account).getElementsByTagName("Id"); 
int lengthofID = value1Nodes.getLength(); 

if(lengthofID > 0){ 
//..proceed 
} 

alternativ ähnlich ist

doc.getChildNodes().item(0).getChildNodes().getLength(); 
+0

** getElementByTagName ** Methode gibt NodeList aller Elemente mit einem bestimmten Namen zurück, und ich will das nicht. Ich möchte mich für das Kind identifizieren. – ketan

+0

'Kind' ist auch ein' Element' in seinem Knoten. Vielleicht hilft das zweite Beispiel 'doc.getChildNodes(). Item (0) .getChildNodes(). GetLength();' – mattymanme