2012-10-14 135 views
5

我有一個xml文件類似以下:如何通過使用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> 

如何可以選擇通過他們的「名字」價值「URL」元素用JDOM庫在java中的屬性?有沒有直接的方法,或者我必須選擇所有的子元素,並使用「for」循環檢查所需的元素?在.Net中有沒有像Linq這樣的方法?

回答

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'的屬性的元素,name屬性的值是'Critic User'。

調整的味道,並閱讀的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); 不錯,但是...

相關問題