当我的XML标记包含" _"时,无法从Document检索节点列表。在里面

时间:2017-01-17 06:39:58

标签: java web-services jaxb w3c xmlnodelist

我有像这样的xml

<PARENT>
<TAG_1>
<ROLE>Architect </ROLE>
</TAG_1>
<TAG2>
<ROLE>Architect </ROLE>
</TAG2>
</PARENT>

我正在使用JAX-B框架进行编组和UnMarshalling。

问题是当我正在检索org.w3c.dom.NodeList时,我能够为TAG2做什么,它不包含_而且无法为包含_(下划线)

的TAG1做

org.w3c.dom.NodeList nodeList = org.w3c.dom.Document.getElementsByTagName("TAG2")返回长度1,这是正确的。

org.w3c.dom.NodeList nodeList = org.w3c.dom.Document.getElementsByTagName("TAG_1"),它返回长度0但它应该是1.

任何人都可以建议下划线可能存在什么问题以及如何解决这个问题,因为我无法按照客户的指示进行更改。

由于

2 个答案:

答案 0 :(得分:0)

嗯,它对我有用:

package com.stackof.helps.nonspring;

import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.junit.Assert;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

/**
 * @author samuele m.
 *
 */
public class MixedTest
{
    @Test
    public void testPathItem() throws Exception {
        String xml = "<PARENT><TAG_1><ROLE>Architect </ROLE></TAG_1><TAG1><ROLE>Engineer </ROLE></TAG1></PARENT>";
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        dbFactory.setIgnoringElementContentWhitespace(true);
        dbFactory.setIgnoringComments(true);
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        InputSource is = new InputSource(new StringReader(xml));
        Document doc = dBuilder.parse(is);
        NodeList nodeList1 = doc.getElementsByTagName("TAG1");
        NodeList nodeList2 = doc.getElementsByTagName("TAG_1");
        Assert.assertEquals(1, nodeList1.getLength());
        Assert.assertEquals(1, nodeList2.getLength());

        NodeList engList = ((Element)nodeList1.item(0)).getElementsByTagName("ROLE");
        NodeList arcList = ((Element)nodeList2.item(0)).getElementsByTagName("ROLE");
        Assert.assertEquals(1, engList.getLength());
        Assert.assertEquals(1, arcList.getLength());

        String eng = engList.item(0).getTextContent().trim();
        String arc = arcList.item(0).getTextContent().trim();
        Assert.assertEquals("Architect", arc);
        Assert.assertEquals("Engineer", eng);
    }
}

请检查您的代码,因为某处出现了问题(文件编码?)

答案 1 :(得分:0)

我的问题已经解决。非常感谢您的帮助,并为我提供了见解。这不是一个下划线的问题,但在我的代码中隐藏的响应过滤器的问题,我不知道并调试以找出。