2016-07-11 5 views
0

Ich habe die folgende XML:XML-Analyse: Kann nicht finden Knoten von Tagname

<?xml version="1.0" encoding="UTF-8"?> 
<subscriber> 
    <data name="quota"> 
     <![CDATA[ 
     <?xml version="1.0" encoding="UTF-8"?><usage><version>1</version><field name="Cid"/><field name="Time"/><field name="totalVolume">4</field><field name="inputVolume"/><field name="outputVolume"/><field name="serviceSpecific"/><field name="nextResetTime"/><field name="Type"/><field name="GrantedTotalVolume"/><field name="GrantedInputVolume"/><field name="GrantedOutputVolume"/><field name="GrantedTime"/><field name="GrantedServiceSpecific"/><field name="QuotaState"/><field name="RefInstanceId"/><field name="Name">TEST_QUOTA</field></usage> 
]]> 
    </data> 
</subscriber> 

Um alle field Knoten zu finden, schrieb ich:

dbuilder = dbc.newDocumentBuilder(); 
Document doc = dbuilder.parse(new InputSource(new StringReader(xmlString))); 
NodeList nl = doc.getElementsByTagName("field"); 
log.debug("node list length: " + nl.getLength()); 
for(int i = 0 ; i < nl.getLength(); i++){ 
    Element e = (Element)nl.item(i); 
    log.debug("node: " + e); 
    String name = e.getAttribute("name"); 
} 

jedoch die Länge des NodeList ist 0, daher kann kein Knoten mit dem Namen field gefunden werden. Ich frage mich, ob es wegen der Metadaten außerhalb der field Knoten ist, und wenn ja, wie kann ich auf die field Knoten zugreifen?

+0

haben Sie den Inhalt des Daten-Tags extrahiert? Alles in einer

+0

Oh, ich verstehe. Ich tat es nicht. Sollte ich 'doc.getElementsByTagName (" Daten ")' zuerst? –

+0

@ k5_ Wenn sie sich nicht als Elemente registrieren, wie kann ich sie analysieren? –

Antwort

2

Zuerst müssen Sie das Datenelement aus dem Ausgangsdokument

Document doc = dbuilder.parse(new InputSource(new StringReader(xmlString))); 
    Element subscriber = (Element) doc.getElementsByTagName("subscriber").item(0); 
    Element data = (Element) subscriber.getElementsByTagName("data").item(0); 

Danach können Sie ihre Textcontent verwenden müssen, extrahieren, um das Dokument zu analysieren Sie eigentlich wollen.

Document doc2 = dbuilder.parse(new InputSource(new StringReader(data.getTextContent().trim()))); 
    Element usage = (Element) doc2.getElementsByTagName("usage").item(0); 
    NodeList nl = usage.getElementsByTagName("field");