XMLファイルに「XMLNS」がある場合、XPathを使用してXMLファイルからテキストを取得するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/3493310

  •  28-09-2019
  •  | 
  •  

質問

ウェブサイトから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ネームスペースをクエリに認識させる必要があります。ここでのこの答えは、それがトリックをするように見えます:

デフォルトのXMLネームスペースJDOMおよびXPATE

また、クエリを変更してローカル名を使用して名前空間を無視することもできます。

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の答えを使用して、指定された名前空間を無視するだけです(私が彼を正しく理解した場合)。同じ階層レベルでより多くの「ルート」ノードがある場合、これは問題につながる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top