gpt4 book ai didi

java - 将 xpath 与 java 类中的命名空间一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:42 24 4
gpt4 key购买 nike

我正在尝试使用 XPATH 解析带有命名空间的 xml 文档。我已经读过它应该如何完成。我也实现了 NamespaceContext 。但是,我仍然没有得到值(value)观。我想我错过了一些简单的事情。

我的 xml 输入是

<?xml version="1.0" encoding="UTF-8"?>
<ns1:customer xmlns:ns1="http://test/ns1">
<ns1:name>john</ns1:name>
</ns1:customer>

我的主文件是 TestXMLPath

public static void main(String[] args) throws Exception {

String myInputXML = "src/testxmlpath/input-with-namespace.xml";
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();

String expression ="/ns1:customer/ns1:name";

Document document = db.parse(new File(myInputXML)) ;
XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setNamespaceContext(new SimpleNamespaceContextImpl());
String value = xpath.evaluate(expression,document);
System.out.println("value" + value);
}

我的 NamespaceContext 实现是

public class SimpleNamespaceContextImpl implements NamespaceContext {

@Override
public String getNamespaceURI(String prefix) {
System.out.println("getNameSpace for prefix "+prefix);
if (prefix == null) {
throw new NullPointerException("Null prefix");
} else if ("ns1".equals(prefix)) {
return "http://test/ns1";
} else if ("xml".equals(prefix)) {
return XMLConstants.XML_NS_URI;
} else {
return XMLConstants.XML_NS_URI;
}
}

@Override
public String getPrefix(String namespaceURI) {
return "ns1";
}

@Override
public Iterator getPrefixes(String namespaceURI) {
return null;
}
}

当方法被调用时我会打印出来。这是输出。

getNameSpace for prefix ns1
getNameSpace for prefix ns1
value
BUILD SUCCESSFUL

我不明白,为什么它不起作用??

任何帮助将不胜感激。

谢谢

最佳答案

对我来说效果很好。输出:

getNameSpace for prefix ns1
getNameSpace for prefix ns1
valuejohn

您确定加载的文档正确吗?我使用 Xerces 来构建文档,并使用 Saxon 来评估 XPath。相关类的转储:

class com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl
class com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl
class net.sf.saxon.xpath.XPathFactoryImpl

关于java - 将 xpath 与 java 类中的命名空间一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11442213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com