繁体   English   中英

获取XML文档中使用的前缀/名称空间绑定,最好使用org.w3c.dom和javax.xml API

[英]get prefix / namespace bindings used in an XML document preferably using org.w3c.dom and javax.xml APIs

有没有一种方法可以获取XML文档中使用的前缀/名称空间绑定,最好使用标准的org.w3c.orgjavax.xml API? 我知道可以在包含的元素中重新定义前缀,因此API也应该能够解决这个问题。

我正在寻找一个代码片段,该代码片段将采用某种序列化形式的XML文档并返回到URI名称绑定的前缀Map<String, String> (加上API中的一些额外技巧,以解决封闭元素中的重新定义)。 理想情况下,库可能能够做一些更奇妙的事情,例如识别/清除未使用的绑定,将重复的绑定移动到它们最近的公共祖先(而不是在各处复制它们)等等。

这是使用Guava MultiMap的开始:

Document doc = ...;

Multimap<String, String> bindings = LinkedHashMultimap.create();
DocumentTraversal dt = (DocumentTraversal) doc;
NodeIterator i = dt.createNodeIterator(doc, NodeFilter.SHOW_ELEMENT,
        null, false);
Element element = (Element) i.nextNode();
while (element != null) {
    String prefix = element.getPrefix();
    if (prefix != null) {
        String uri = element.getNamespaceURI();
        bindings.put(prefix, uri);
    }
    element = (Element) i.nextNode();
}

这只会选择有效的绑定,而不会绑定任何默认名称空间(当然可以固定)。 绑定的重新定义将以文档顺序表示,而不是它们发生的深度。

我猜想此方法的进一步改进取决于您的用例,例如,您需要获得哪些更多信息来使重新定义的绑定更合理?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM