2012-10-14 8 views
5

私は、次のようなxmlファイルがあります:私は彼らの「名前」の値によって「URL」の要素を選択することができますどのようにJDOMを使用してその属性の値で要素を取得する方法は?

<?xml version="1.0" encoding="UTF-8" ?> 
<config> 
    <admins> 
     <url name="Writer Admin">http://www.mywebsite.com/admins?cat=writer</url> 
     <url name="Editor Admin">http://www.mywebsite.com/admins?cat=editor</url> 
    </admins> 
    <users> 
     <url name="Critic User">http://www.mywebsite.com/users?cat=critic</url> 
     <url name="Reviewer User">http://www.mywebsite.com/users?cat=reviewer</url> 
     <url name="Reader User">http://www.mywebsite.com/users?cat=reader</url> 
    </users> 
</config> 

はJavaでJDOMライブラリを使用して属性?何か簡単な方法があるか、またはすべての子要素を選択し、 "for"ループを使用して目的の要素をチェックする必要がありますか? Linq in .Netのようなアプローチはありますか?

答えて

5

XPathはあなたがJDOM 2.xのを使用している場合、それはJDOM 1.xのよりも簡単なので、int型JDOM 2.xでは、それはのようなものになります...あなたの友達です:

String query = "//*[@name= 'Critic User']"; 
XPathExpression<Element> xpe = XPathFactory.instance().compile(query, Filters.element()); 
for (Element urle : xpe.evaluate(mydoc)) 
{ 
    System.out.printf("This Element has name '%s' and text '%s'\n", 
      urle.getName(), urle.getValue()); 
} 

XPathがあります「別の獣」ですが、いくつかのもの(このようなもの)を書くのは簡単です。

上記の「クエリ」は、基本的に言う:「名前」という属性を持つドキュメント内のすべての要素を検索し、name属性の値は「批評ユーザー」です。

は味に調整し、XPathのチュートリアル読み:http://www.w3schools.com/xpath/default.asp

編集を:もちろん、より良いクエリは次のようになります// URL [名= '評論家ユーザーズ@]

+1

パフォーマンスに問題がない場合は、おそらくXPathを使用します。特定の要素を非常に選択的に取り込むことができます。しかし、すべての要素をループすることが過剰に見える場合でも、通常は非常に高速に実行されます。上には、実際のアプリケーションでは、とにかく元のXMLファイルの詳細情報を使用することになります。 –

+0

あなたの時間と配慮に感謝します。 :-) – moorara

0

がために多くのことを感謝しますそれ。 私はrolflがコンパイルメソッドで引数の順序を逆転していることに気付きました。 XPathFactory.instance().compile(query, Filters.element()); の代わりにXPathFactory.instance().compile(Filters.element(), query); いい仕事ですが...

関連する問題