1

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

理解できない、なぜうまくいかないの??

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

1

私にとってはうまくいきます。出力:

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
于 2012-07-11T22:13:55.090 に答える