是否有一种方法可以获得XML文档中使用的前缀/命名空间绑定,最好是使用标准的org.w3c.org和javax.xml API?我理解前缀可以通过在包含的元素中重新定义,所以API也应该能够解释这一点。
我正在寻找一个代码片段,它采用某种序列化形式的XML文档,并将前缀的Map<String, String>返回到URI名称绑定(再加上API中的一些额外的聪明,以解释封闭元素中的重新定义)。理想情况下,库可能能够完成更好的工作,例如标识/清除未使用的绑定,将重复绑定移动到它们最近的共同祖先(而不是让它们在各处复制)等等。
发布于 2013-08-22 15:39:50
下面是一个开始,使用番石榴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();
}这将只获取有效的绑定,并且它不会绑定任何默认名称空间(当然,这是可以修复的)。绑定的重新定义将按文档顺序表示,但不表示它们发生的深度。
我想这个方法的任何进一步改进都取决于您的用例,例如,您还需要哪些信息来使重新定义的绑定变得合理?
https://stackoverflow.com/questions/18382375
复制相似问题