Разбор XML-строки, содержащей гиперссылку - PullRequest
2 голосов
/ 17 августа 2011

Я использую DOM для анализа строки XML, как в следующем примере.Это прекрасно работает, за исключением одного случая.Документ, который я пытаюсь проанализировать, выглядит следующим образом:

<response requestID=\"1234\">
    <expectedValue>Alarm</expectedValue>
    <recommendations>For steps on how to resolve visit <a href=\"some website\">Website</a> and use the search features for \"Alarm\"<recommendations>
    <setting>Active</setting>
<response>

Код, который я использовал для анализа XML, выглядит следующим образом:

try {   
        DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader(xmlResult));

        Document doc = db.parse(is);
        NodeList nlResponse = doc.getElementsByTagName("response");

        String[] String = new String[3];  //result entries

        for (int i = 0; i < nlResponse.getLength(); i++) {
            Element e = (Element) nlResponse.item(i);
            int c1 = 0; //count for string array

            NodeList ev = e.getElementsByTagName("expectedValue");
            Element line = (Element) ev.item(0);
            String[c1] = (getCharacterDataFromElement(line));
            c1++;

            NodeList rec = e.getElementsByTagName("recommendations");
            line = (Element) rec.item(0);
            String[c1] = (getCharacterDataFromElement(line));
            c1++;

            NodeList set = e.getElementsByTagName("settings");
            line = (Element) set.item(0);
            String[c1] = (getCharacterDataFromElement(line));
            c1++;  

Я могу проанализировать код ипоместите результат в массив строк (в отличие от System.out.println ()).В текущем коде мой строковый массив выглядит следующим образом:

String[0] = "Alarm"
String[1] = "For steps on how to resolve visit"
String[2] = "Active"

Я хотел бы иметь возможность прочитать остальную информацию в «Рекомендациях», чтобы в конечном итоге отобразить гиперссылку (вместе сдругой вывод) в TextView.Как я могу это сделать?

1 Ответ

1 голос
/ 17 августа 2011

Я прошу прощения за мой предыдущий ответ, предполагая, что ваш xml был неправильно сформирован.

Я думаю, что происходит, что ваш вызов getCharacterDataFromElement просматривает только первый дочерний узел для текста, когда он будетнужно посмотреть на все дочерние узлы и получить атрибут href, а также текст для 2-го дочернего узла при просмотре узла рекомендаций.

например, после получения элемента для рекомендации

            String srec = "";
            NodeList nl = line.getChildNodes();
            srec += nl.item(0).getTextContent();

            Node n = nl.item(1);
            NamedNodeMap nm = n.getAttributes();
            srec += "<a href=\"" + nm.getNamedItem("href").getTextContent() +  "\">" + n.getTextContent() + "</a>";

            srec += nl.item(2).getTextContent();

            String[c1] = srec; 
...