获取xml文档java

时间:2015-08-31 13:53:02

标签: java xml dom xpath xml-namespaces

我想获取xml文件中的所有命名空间,例如

[http://www.utilities-online.info/xpath/?save=a4ac7360-1994-44c2-9c26-c9f741dc2e44-xpath#.VeRWSvmqpBc][1]

基本上问题是要使用基于命名空间的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中使用?

请在这方面帮助我

0 个答案:

没有答案