2013-05-17 30 views
1

我試圖從遠程API解析某些XML,則XML形成這樣的:的Java XML解析錯誤打印節點值

<django-objects version="1.0"> 
    <object pk="13" model="ballot.poll"> 
     <field type="CharField" name="question">wwwww</field> 
     <field type="DecimalField" name="budget">1</field> 
     <field type="CharField" name="option1"></field> 
     <field type="CharField" name="option2"></field> 
     <field type="CharField" name="option3"></field> 
     <field type="CharField" name="option4"></field> 
     <field type="CharField" name="pollType">YesNo</field> 
     <field type="DateField" name="startDate">2013-05-17</field> 
     <field type="DateField" name="endDate">2013-05-17</field> 
     <field type="CharField" name="targetGender">M</field> 
     <field type="CharField" name="targetMarital">All</field> 
     <field type="SmallIntegerField" name="targetMinAge">1</field> 
     <field type="SmallIntegerField" name="targetMaxAge">1</field> 
    </object> 
</django-objects> 

這裏是我的解析代碼,它試圖輸出nodevaluewith時崩潰一個 「的println需要消息」 異常

InputStream is = new ByteArrayInputStream(msg.getBytes()); 

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setCoalescing(true); 
DocumentBuilder builder = null; 
try { 
    builder = factory.newDocumentBuilder(); 
} catch (ParserConfigurationException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
Document dom = null; 
try { 
    dom = builder.parse(is); 
} catch (SAXException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch blockk 
    e.printStackTrace(); 
} 

org.w3c.dom.Element root = dom.getDocumentElement(); 
NodeList items = root.getElementsByTagName("field"); 

**Log.d("number of fields: ",items.getLength());** // this outputs 13 as expected because there are 13 field elements 

for (int i = 0; i < items.getLength(); i++) { 

    Node item = items.item(i); 
    **Log.d("field", item.getNodeValue());** //crash here 

} 
+0

您可以發佈您提到的崩潰的異常或原因嗎? – HeatfanJohn

+0

增加了錯誤,它的「println需要一個消息」,就像沒有任何東西被返回.getNodeValue() – brux

+0

你在說'item.getNodeValue()'返回null。由於這是XML,因此您考慮使用org.xmlpull.v1.XmlPullParser,如http://developer.android.com/training/basics/network-ops/xml.html中所述 – HeatfanJohn

回答

2

A '元件' 節點包含了一些child nodes of different types。你想要的「文本」節點它總是第一個孩子,這樣你就可以像這樣訪問它...

item.getFirstChild().getNodeValue() 

或者它Java 1.5中更簡單,上面可以直接調用getTextContent()

1

將節點轉換爲元素。

Element tmpElmnt = (Element) item; 

然後,您可以使用Element類中適當的方法來達到您的目的。您將獲得Element類的詳細文檔here,