【问题标题】:getNodeValue of XML when there are two similar tags in xmlxml中有两个相似标签时xml的getNodeValue
【发布时间】:2011-10-05 01:39:17
【问题描述】:

我正在使用 DOM 解析 xml,但遇到了问题。在我的 xml 中,我有三个标签,即 strintstr。现在,在解析时,我得到了两个 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 节点获取不同的值

【问题讨论】:

  • 恐怕sn-p的代码太可怕了。你能不能把它简化为能说明问题的东西?
  • if 语句 (node1.getNodeType() == Node.ELEMENT_NODE) 在您的 for 循环中定义了 3 次,并且您只对 node1 进行了一次赋值。这对我来说没有意义。首先,你应该简化你的代码,然后看问题。

标签: java dom xml-parsing


【解决方案1】:

我只看到陈述

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

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

您确定,您访问的是正确的元素。

...顺便说一句。代码真的很混乱,因为你同时解析和写入数据。尝试将解析后的 XML 放入自己的 ObjectMap 中,然后写入(格式化)它

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多