5

次のようなxmlファイルがあります。

<?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ライブラリを使用して、「name」属性の値で「url」要素を選択するにはどうすればよいですか?簡単な方法はありますか、それともすべての子要素を選択し、「for」ループを使用して目的の要素を確認する必要がありますか?.NetのLinqのようなアプローチはありますか?

4

2 に答える 2

5

XPathはあなたの友達です...JDOM2.xを使用している場合は、JDOM 1.xよりも簡単なので、intJDOM2.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」という属性を持つドキュメント内のすべての要素を検索し、name属性の値は「CriticUser」です。

好みに合わせて調整し、XPathチュートリアルを読んでください:http ://www.w3schools.com/xpath/default.asp

編集:もちろん、より良いクエリは次のようになります:// url [@ name ='Critic User']

于 2012-10-14T22:19:49.777 に答える
0

どうもありがとうございました。rolfl が compile メソッドの引数の順序を逆にしていることに気付きました。XPathFactory.instance().compile(query, Filters.element()); しかし、良い仕事の代わりにXPathFactory.instance().compile(Filters.element(), query); ...

于 2013-05-09T17:35:15.820 に答える