Получение ошибки в DOM Parser - PullRequest
0 голосов
/ 12 апреля 2011
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;
}

Я использую этот код для синтаксического анализа XML с использованием DOM

РЕДАКТИРОВАТЬ!

<?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);

, если значение узла содержит String, например "Let's go for coeffy", так что это дает мне строку типа "Lets go for coeffy", так в чем же проблема?пожалуйста, помогите мне ..

1 Ответ

1 голос
/ 12 апреля 2011

Вы можете использовать Element.getTextContent () для получения текста элемента. Обратите внимание, что этот метод может быть принят только в API уровня 8 и выше.

На уровне APi менее 8 вы можете использовать метод getNodeValue . Это будет успешно, только если ваш узел имеет тип TEXT_NODE

EDIT

    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:

Для работы с сущностями # & ... используйте 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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...