このファイルに対して XPath クエリを実行したい (抜粋を表示):
<?xml version="1.0" encoding="UTF-8"?>
<!-- MetaDataAPI generated on: Friday, May 25, 2007 3:26:31 PM CEST -->
<ModelClass xmlns="http://xml.sap.com/2002/10/metamodel/webdynpro" xmlns:IDX="urn:sap.com:WebDynpro.ModelClass:2.0">
<ModelClass.Parent>
<Core.Reference package="com.test.mypackage" name="ModelName" type="Model"/>
これは私が使用しているコードのスニペットです:
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document document = builder.parse(new File(testFile));
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
xpath.setNamespaceContext( new NamespaceContext() {
public String getNamespaceURI(String prefix) {
...
String result = xpath.evaluate(xpathQueryString, document);
System.out.println(result);
私が直面している問題は、デフォルトの名前空間が XPath クエリで参照されている場合、それを解決するために getNamespaceURI メソッドが呼び出されないことです。たとえば、次のクエリは何も抽出しません。
//xmlns:ModelClass.Parent/xmlns:Core.Reference[@type=\"Model\"]/@package
xmlns
ここで、パーサーを偽のプレフィックスに置き換えてd
から、それに応じてメソッドを作成することでパーサーを「だます」ことを試みました (遭遇したときgetNamespaceURI
に戻るように)。この場合、が呼び出されますが、XPath 式の評価の結果は常に空の文字列になります。http://xml.sap.com/2002/10/metamodel/webdynpro
d
getNamespaceURI
ファイルと XPath クエリ式から名前空間を取り除くと、目的の文字列 (com.test.mypackage) を取得できます。
デフォルトの名前空間で物事を適切に機能させる方法はありますか?