Java 当XML中有两个相似的标记时,XML的getNodeValue

Java 当XML中有两个相似的标记时,XML的getNodeValue,java,dom,xml-parsing,Java,Dom,Xml Parsing,我正在使用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

我正在使用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>

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
123351
字母表
用于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>");
    }
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
InputSource is=新的InputSource();
is.setCharacterStream(新的StringReader(gXml));
文档doc=db.parse(is);
NodeList infraline1=doc.getElementsByTagName(节点);
sb.追加(“\r\n”);
对于(int i=0;i

请提供帮助,因为我需要为两个strnode

获取不同的值,我只看到这些语句

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

您确定,您正在访问正确的元素


。。。顺便说一下。代码真的很混乱,因为您正在同时解析和写入数据。尝试将解析后的XML放入自己的
对象
映射
中,然后编写(格式化)它

恐怕这段代码非常可怕。你能不能把它简化成一个能说明问题的东西呢?在你的
for
循环中,if
语句
(node1.getNodeType()==Node.ELEMENT\u Node)
定义了三次,你只给
node1
赋值一次。这对我来说没有意义。首先,您应该简化代码,然后看看问题所在。
Element element3 = (Element) nodelist.item(0);