デフォルトの名前空間のxmlnsを持つクエリは、(抜粋が示さ):のJavaのXPath:私は、このファイルのXPathクエリを実行したい
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);
:これは私が使用しているコードの抜粋である
<?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"/>
私が直面している問題は、デフォルトネームスペースがXPathクエリで参照されているときに、getNamespaceURIメソッドが呼び出されて解決されないということです。 は、例えばこのクエリは何も抽出しない:
//xmlns:ModelClass.Parent/xmlns:Core.Reference[@type=\"Model\"]/@package
は今、私はそうhttp://xml.sap.com/2002/10/metamodel/webdynpro
を返すために(偽の接頭辞d
でxmlns
を交換し、それに応じてgetNamespaceURI
メソッドを書くことでパーサを「だまし」試してみましたd
に遭遇したとき)。この場合、getNamespaceURI
が呼び出されますが、XPath式の評価結果は常に空の文字列です。
ファイルとXPathクエリ式から名前空間を取り除くと、私が望む文字列(com.test.mypackage)を取得できます。
デフォルトの名前空間で正常に機能するようにする方法はありますか?
あなたNamespace
文脈では
こんにちは、私は試しましたが、うまくいきません... –
名前空間を認識するDocumentBuilderも作成してくださいhttp://docs.oracle.com/javase/6/docs/api/javax/ xml/parsers/DocumentBuilderFactory.html#setNamespaceAware%28ブール値%29名前空間を操作する前に。 –
それはトリックでした。私はDocumentBuilderがデフォルトで名前空間を認識していると考えました。ありがとうございました。 –