在DOM Parser中获取错误

时间:2011-04-12 05:33:13

标签: android dom

private String getNodeValue(Element e) {
    String str = "";
    Node node = e.getFirstChild();

    if (node instanceof CharacterData) {

        CharacterData cd = (CharacterData) node;
        str += cd.getData();
    }
    System.out.println("String ="+ str);
    return str;
}

我正在使用此代码使用DOM

解析xml

修改<!/强>

<?xml version="1.0" encoding="ISO-8859-1"?>
<root status="1">
<reminder type= "timer" id="861">
<user fromid="48" toid="48" fromemail="xyz@xyz.com">Dharmendra Patel</user>
<title>10:00 AM Coffy?</title> 
<desc>Let&#039;s go for coffy</desc>
<date>13/03/2011 09:22:00</date>
<repeat>MO</repeat> 
<todo><category name="">
<item></item> 
</category>
</todo>
</reminder>
</root>

这是我的XMl响应,我正在使用此代码

NodeList nldesc = elUser.getElementsByTagName("desc");

Element eldesc = (Element) nldesc.item(0);

String taskdesc = getNodeValue(eldesc);

如果节点值包含像“让我们去为cosffy”这样的字符串,那么这给了我像“Lets go for coeffy”这样的字符串,那么问题是什么?请帮帮我..

1 个答案:

答案 0 :(得分:1)

您可以使用Element.getTextContent()获取元素文字。请注意,此方法只能在API级别8及更高版本中加入。

在小于8的APi级别中,您可以使用getNodeValue方法。仅当您的节点类型为TEXT_NODE

时,它才会成功

修改

    try {
        Document doc =
                DocumentBuilderFactory
                        .newInstance()
                        .newDocumentBuilder().parse(
                            new StringBufferInputStream("<desc>let's go for Coffey </desc>"));
        NodeList list = doc.getElementsByTagName("desc");
        Log.d("MainActivity", list.item(0).getFirstChild().getNodeValue());
    } catch (ParserConfigurationException e) {
        // ignore
    } catch (IOException e) {
        // ignore
    } catch (SAXException e) {
        // ignore
    }

以下代码运行正常。执行完后,我已经登录了我的logcat:

04-12 21:20:42.766: DEBUG/MainActivity(26843): let's go for Coffey

编辑2:

要处理#&amp; ...实体,请在编码字符串上使用Html.fromHtml(String)方法,然后在结果上使用toString()。

Log.d("MainActivity", 
    Html.fromHTML(
        list.item(0).getFirstChild().getNodeValue()
    ).toString());

编辑3

以下是您案例的完整解决方案。

    String data = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> <root status=\"1\"> <reminder type= \"timer\" id=\"861\"> <user fromid=\"48\" toid=\"48\" fromemail=\"xyz@xyz.com\">Dharmendra Patel</user> <title>10:00 AM Coffy?</title> <desc>Let&#039;s go for coffy</desc> <date>13/03/2011 09:22:00</date> <repeat>MO</repeat> <todo><category name=\"\"> <item></item> </category> </todo> </reminder> </root>";
    try {
        Document doc =
                DocumentBuilderFactory
                        .newInstance()
                        .newDocumentBuilder().parse(
                        new StringBufferInputStream(data));
        NodeList list = doc.getElementsByTagName("desc");
        Node node = list.item(0);
        NodeList charNodes = node.getChildNodes();
        StringBuilder builder = new StringBuilder();
        for(int i = 0, l = charNodes.getLength(); i < l; i++) {
            builder.append(Html.fromHtml(charNodes.item(i).getNodeValue()).toString());
        }
        Log.d("MainActivity", builder.toString());
    } catch (ParserConfigurationException e) {
        // ignore
    } catch (IOException e) {
        // ignore
    } catch (SAXException e) {
        // ignore
    }