getNodeValue XML, когда в xml есть два похожих тега - PullRequest
0 голосов
/ 14 июля 2011

Я использую DOM для разбора xml, но столкнулся с проблемой.В моем XML у меня есть три тега, а именно str , int и str .Теперь при разборе я получаю одинаковое значение для обоих тегов str , тогда как они должны быть разными.

Мой XML

<result name="response" numFound="62996" start="0">
    <doc>
        <str name="body">
            a b c d e f g h i j k l m n o p q r s t u v w x  y z
        </str>
        <int name="content_id">123351</int>
        <str name="title">
            Alphabets
        </str>
    </doc>
</result>

Код для разбора XML

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader(gXml));
        Document doc = db.parse(is);
        NodeList infraline1 = doc.getElementsByTagName(node);

        sb.append("<results count=");
        sb.append("\"10\"");
        sb.append(">\r\n");

        for (int i = 0; i < infraline1.getLength(); i++) {
            Node node1 = infraline1.item(i);
            if (node1.getNodeType() == Node.ELEMENT_NODE) {
                Element element = (Element) node1;
                NodeList nodelist = element.getElementsByTagName("str");
                Element element1 = (Element) nodelist.item(0);
                NodeList body = element1.getChildNodes();
                sb.append("<result>\r\n");
                sb.append("<body>");
                    sb.append((body.item(0)).getNodeValue().trim());
                sb.append("</body>\r\n");
                if (node1.getNodeType() == Node.ELEMENT_NODE) {
                    Element element2 = (Element) node1;
                    NodeList nodelist1 = element2.getElementsByTagName("int");
                    Element element3 = (Element) nodelist1.item(0);
                    NodeList id = element3.getChildNodes();
                    sb.append("<id>");
                        sb.append(id.item(0).getNodeValue().trim());
                    sb.append("</id>\r\n");
                }
                if(node1.getNodeType() == Node.ELEMENT_NODE){
                    Element element4 = (Element) node1;
                    NodeList nodelist2 = element4.getElementsByTagName("str");
                    Element element5 = (Element) nodelist2.item(0);
                    NodeList title = element5.getChildNodes();
                    sb.append("<title>");
                        sb.append(title.item(0)).getNodeValue());
                    sb.append("</title>\r\n");
                }
                sb.append("</result>\r\n"); 
            }
        }
        sb.append("</results>");
    }

Пожалуйста, помогите, поскольку мне нужно получить различные значения для обоих str узла

1 Ответ

0 голосов
/ 14 июля 2011

Я вижу только заявления

Element element1 = (Element) nodelist.item(0);

и

Element element3 = (Element) nodelist.item(0);

Вы уверены, что получаете доступ к нужным элементам.

... и кстати. Код действительно запутан, потому что вы анализируете и пишете данные одновременно. Попробуйте поместить разобранный XML в собственный Object или Map, а затем записать (отформатировать) его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...