[英]get prefix / namespace bindings used in an XML document preferably using org.w3c.dom and javax.xml APIs
有没有一种方法可以获取XML文档中使用的前缀/名称空间绑定,最好使用标准的org.w3c.org
和javax.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.