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

时间:2016-03-03 05:26:18

标签: java xml

我有一个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>
....

还有许多其他节点。所有节点都有像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());
        }
}

但是当我执行此代码时,它会为单个节点打印null。有人能告诉我这里我做错了什么吗?

我在互联网上阅读,我发现node.getLocalName()将给出没有名称空间的节点名称。那么在我的情况下有什么问题?

1 个答案:

答案 0 :(得分:0)

您需要将文档构建器工厂设置为首先了解名称空间。然后getLocalName()将开始返回非null值。

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