我想获取xml文件中的所有命名空间,例如
基本上问题是要使用基于命名空间的xpath进行搜索,为此我必须使用setNamespaceContext
并且不知道命名空间值,因为它在解析文件时将在运行时。
xpath.setNamespaceContext(namespaces);
public class SimpleNamespaceContext implements NamespaceContext {
private final Map<String, String> PREF_MAP = new HashMap<String, String>();
public SimpleNamespaceContext(final Map<String, String> prefMap) {
PREF_MAP.putAll(prefMap);
}
public String getNamespaceURI(String prefix) {
return PREF_MAP.get(prefix);
}
public String getPrefix(String uri) {
throw new UnsupportedOperationException();
}
public Iterator getPrefixes(String uri) {
throw new UnsupportedOperationException();
}
}
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
HashMap<String, String> prefMap = new HashMap<String, String>() {{
put("main", "http://schemas.openxmlformats.org/spreadsheetml/2006/main");
put("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
}};
SimpleNamespaceContext namespaces = new SimpleNamespaceContext(prefMap);
xpath.setNamespaceContext(namespaces);
XPathExpression expr = xpath
.compile("/main:workbook/main:sheets/main:sheet[1]");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
参考链接[How to query XML using namespaces in Java with XPath?
要实现上述参考,我需要获取所有名称空间 查询我用来获取使用xpath的所有命名空间是
try {
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("//namespace::*");
NodeList a = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
System.out.println(a.getLength());
} catch (Exception e) {
Utility.consoleInfo(e);
}
但是这总是返回大小为0的节点列表。 我是否朝着错误的方向努力实现这一目标?或者还有什么方法可以解决这个问题?
摘要 我应该如何获得所有名称空间以便可以在xpath中使用?
请在这方面帮助我