读取DOM文档中的所有名称空间

时间:2014-01-04 17:17:25

标签: java xml dom

我想读取DOM文档中的所有命名空间。

我的输入XML文件是:

<a:Sample xmlns:a="http://a.org/" 
    xmlns:b="http://b.org/">
    <a:Element b:Attribute="text"> </a:Element>
</a:Sample>

我想在给定的输入XML中获取所有带有关联命名空间的前缀。

我有一个方法,其定义如下。

public Document check(Document srcfile) {
    Document naReport = null;

    if(srcfile != null) {
        // Parse the document using builder.
        if (srcfile instanceof DocumentTraversal) {
            DocumentTraversal dt = (DocumentTraversal) srcfile;
            NodeIterator i = dt.createNodeIterator(srcfile, NodeFilter.SHOW_ELEMENT, null, false);
            System.out.println(srcfile.getPrefix());
            System.out.println(srcfile.getNamespaceURI());
            Element element = (Element) i.nextNode();
            while (element != null) {
                String prefix = element.getPrefix();
                if (prefix != null) {
                    String uri = element.getNamespaceURI();
                    System.out.println("Prefix: " + prefix);
                    System.out.println("URI: " + uri);
                    // bindings.put(prefix, uri);
                }
                element = (Element) i.nextNode();
            }
        }
    }

    return naReport; 
}

但是,当我运行我的程序时,我得到以下输出:

Prefix: a
URI: http://a.org/
Prefix: a
URI: http://a.org/

有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

您需要遍历主元素循环中每个元素的属性:

NamedNodeMap map = element.getAttributes();
for (int iattr=0; iattr<map.getLength(); iattr++) {
   Attr attr = (Attr)map.item(iattr);
   if (attr.getNamespaceURI() != null) {
      System.out.println("Attr " + attr.getName() + " -  " + attr.getNamespaceURI());
   }
}