1

我正在尝试从远程 api 解析一些 xml,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>

这是我的解析代码,它在尝试输出节点值时崩溃,出现“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

}
4

2 回答 2

2

一个“元素”节点包含许多不同类型的子节点。您想要始终是第一个孩子的“文本”节点,因此您可以像这样访问它...

item.getFirstChild().getNodeValue()

或者在 Java 1.5 及更高版本中更直接,您可以getTextContent()直接调用。

于 2013-05-17T22:23:46.317 回答
1

Cast the node to an element.

Element tmpElmnt = (Element) item;

Then you can use the appropriate methods from Element class to serve your purpose. You will get detailed documentation of Element class here,

于 2013-05-17T22:29:24.473 回答