XPATH を使用して名前空間で xml ドキュメントを解析しようとしています。私はそれがどのように行われるべきかを読みました。NamespaceContext も実装しました。しかし、私はまだ値を取得していません。私は単純なものが欠けていると思います。
私の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
理解できない、なぜうまくいかないの??
どんな助けでも大歓迎です。
ありがとう