2

Webサイト( http://www.abc.com/)からXMLファイルを取得します。

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ファイルにあります。

今、私はJDOMXPathを使用してテキストを取得しています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ファイルから削除するためにテストしました。問題ありません。

Hello!存在する場合、取得するようにJavaコードを変更する方法はxmlns="http://www.abc.com/"

(このXMLファイルを変更することはできません)

手伝ってくれてありがとう :)

4

2 に答える 2

2

クエリにxml名前空間を認識させる必要があります。ここでのこの答えは、それがトリックを行うように見えます:

デフォルトのXml名前空間JDOMおよびXPATH

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

XPath xpath = XPath.newInstance("/*[local-name() = 'root']");

これにより、rootという名前のノードが返されます。つまり、それがサポートされていて、正しく入力した場合です。:) XML+XPATH用のJavaAPIに精通していません。

ノード「root」を「root」という名前の他のノードと区別するためにxml名前空間が存在することに注意してください。クラス/パッケージの名前空間と同じです。それらを無視すると、名前の衝突につながる可能性があります。マイレージは異なる場合があります。

HTH、ザック

于 2010-08-16T13:11:07.253 に答える
1

私は最近これをしていません。しかし、クイック検索が見つかりました

http://illegalargumentexception.blogspot.com/2009/05/java-using-xpath-with-namespaces-and.html

XPathFactoryの使用法を示すもの:

NamespaceContext context = new NamespaceContextMap("http://www.abc.com/" );

または、ザックの答えを使用して、指定された名前空間を無視することもできます(私が彼を正しく理解している場合)。同じ階層レベルにさらに多くの「ルート」ノードがある場合、これは問題を引き起こす可能性があります。

于 2010-08-16T13:15:01.253 に答える