XMLファイルに「XMLNS」がある場合、XPathを使用してXMLファイルからテキストを取得するにはどうすればよいですか
質問
ウェブサイトからXMLファイルを取得します(http://www.abc.com/),
URLは次のとおりです。 http://www.abc.com/api/api.xml
コンテンツは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.abc.com/">
<name>Hello!</name>
</root>
持っています xmlns="http://www.abc.com/"
XMLファイルで、
今、私はJDOM XPATHを使用してテキストを取得します Hello!
XPath xpath = XPath.newInstance("/root/name/text()");
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new URL("http://www.abc.com/api/api.xml"));
System.out.println(xpath.valueOf(doc)); //nothing to print...
削除するためにテストします xmlns="http://www.abc.com/"
XMLファイルから、それは仕事です!
Javaコードを取得する方法 Hello!
, 、 もしも xmlns="http://www.abc.com/"
存在?
(このXMLファイルをchagneできません)
手伝ってくれてありがとう :)
解決
XMLネームスペースをクエリに認識させる必要があります。ここでのこの答えは、それがトリックをするように見えます:
また、クエリを変更してローカル名を使用して名前空間を無視することもできます。
XPath xpath = XPath.newInstance("/*[local-name() = 'root']");
それは、rootという名前のノードを返すはずです。つまり、それがサポートしていて、正しく入力した場合です! :)私はXML + XPathのJava APIに精通していません。
XMLネームスペースが存在することに注意して、「ルート」という名前のノード「ルート」を区別してください。クラス/パッケージ名のスペースのように。それらを無視すると、名前の衝突につながる可能性があります。あなたの走行距離は異なるかもしれません。
HTH、ザック
他のヒント
私は最近これをしていません。しかし、簡単な検索が見つかりました
http://illegalargumentexception.blogspot.com/2009/05/java-using-xpath-with-namespaces-and.html
これは、XpathFactoryの使用法を示しています。
NamespaceContext context = new NamespaceContextMap("http://www.abc.com/" );
または、Zachの答えを使用して、指定された名前空間を無視するだけです(私が彼を正しく理解した場合)。同じ階層レベルでより多くの「ルート」ノードがある場合、これは問題につながる可能性があります。