如何在java中获得没有名称空间的XML节点名?

如何在java中获得没有名称空间的XML节点名?,java,xml,Java,Xml,我有一个xml文件,其中包含如下所示的数据: .... <ems:MessageInformation> <ecs:MessageID>2147321820</ecs:MessageID> <ecs:MessageTimeStamp>2016-01-01T04:38:33</ecs:MessageTimeStamp> <ecs:SendingSystem>LD</ec

我有一个xml文件,其中包含如下所示的数据:

 ....
 <ems:MessageInformation>
        <ecs:MessageID>2147321820</ecs:MessageID>
        <ecs:MessageTimeStamp>2016-01-01T04:38:33</ecs:MessageTimeStamp>
        <ecs:SendingSystem>LD</ecs:SendingSystem>
        <ecs:ReceivingSystem>CH</ecs:ReceivingSystem>
        <ecs:ServicingFipsCountyCode>037</ecs:ServicingFipsCountyCode>
        <ecs:Environment>UGS-D8UACS02</ecs:Environment>
</ems:MessageInformation>
....
。。。。
2147321820
2016-01-01T04:38:33
LD
中国
037
UGS-D8UACS02
....
还有许多其他节点。所有节点都有名称空间,如ecs、tns、ems等。我使用下面的代码部分来提取所有没有名称空间的节点名称

 public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException, TransformerException {

        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
        Document document = docBuilder.parse(new File("C:\\Users\\DadMadhR\\Desktop\\temp\\EDR_D3A0327.XML"));

        NodeList nodeList = document.getElementsByTagName("*");
        for (int i = 0; i < nodeList.getLength(); i++) {
            Node node = nodeList.item(i);
            //System.out.println(node.getNodeName());
            System.out.println(node.getLocalName());
        }
}
publicstaticvoidmain(字符串[]args)抛出SAXException、IOException、ParserConfiguration异常、TransformerException{
DocumentBuilderFactory docBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=docBuilderFactory.newDocumentBuilder();
Document Document=docBuilder.parse(新文件(“C:\\Users\\DadMadhR\\Desktop\\temp\\EDR\u D3A0327.XML”);
NodeList NodeList=document.getElementsByTagName(“*”);
for(int i=0;i
但当我执行这段代码时,它为单个节点打印null。有人能告诉我我做错了什么吗


我在互联网上读到,我知道node.getLocalName()将给出节点名,而不包含名称空间。那么在我的例子中有什么问题呢?

您需要首先将文档生成器工厂设置为支持名称空间。然后
getLocalName()
将开始返回非空值

DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
docBuilder.setNamespaceAware(true);   // <=== here
Document document = docBuilder.parse(new File("C:\\Users\\DadMadhR\\Desktop\\temp\\EDR_D3A0327.XML"));
DocumentBuilder docBuilder=docBuilderFactory.newDocumentBuilder();

docBuilder.setNamespaceAware(true);//请注意,对于除元素\节点和属性\节点之外的任何类型的节点,以及使用DOM级别1方法创建的节点,例如Document.createElement(),这始终为空。最好先检查节点类型,然后使用该方法