我討厭在這裏留下這個,但我回答了類似的問題here。
在Java中,您在實際解析XML時有很多選項 - XPath將是最慢的,但會爲您提供一種很好的表達式語言來查詢內容。 DOM將是第二個最慢的,但給你一個樹形模型來記憶你的文檔走路。 SAX會更快,但要求您在動態分析文檔時構建列表,最後STAX將是最快的,但要求您爲自己的格式編寫一些特定的代碼來構建列表。
最後,我會推薦一個我編寫的名爲SJXP的庫,它爲您提供了XPath輕鬆實現的STAX性能......它是兩者的完美結合。
你可以編寫像「/ root/Persons/list/Person/Name」這樣的規則,並給它一個你的文檔,並且每次點擊一個名字並調用用戶提供的回調函數時就會觸發它,找到。
您爲所有您想要的和中提供的值創建了一些規則...您可以爲「/ root/Persons/list/Person」開放標籤創建一個START_TAG規則,並創建一個新的「Person p =新的Person()」在你的代碼,然後根據每個子元素命中,您只需設置上的人適當的值,這樣的事情(作爲一個例子):
IRule linkRule = new DefaultRule(Type.CHARACTER, "/root/Persons/list/Person/Name") {
@Override
public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
// Get the last person we added on open-tag.
Person p = personList.get(personList.size() - 1);
// <Name> tag was parsed, 'text' is our parsed Name. Set it.
p.setName(text);
}
}
約SJXP的好處是,內存開銷低於其他解析器方法並且性能更高(SAX將解析匹配上的元素,基於STAX的解析不會在流請求之前解析出流中的元素)。
爲了遍歷DOM和所有Node元素來構建你的列表,你最終會寫同樣令人困惑的代碼。最後,如果你對XML-> Object映射感到滿意,你可以做別人說的和利用JAXB的東西。你將需要爲你的XML文件編寫一個模式,然後它會爲你生成完美映射的Java對象。然後,您可以將XML文件直接映射到Java對象,並調用類似「persons.getList()」或JAXB爲您生成的任何內容。
在這種情況下(大致),內存開銷和性能將與DOM解析一致。
感謝,即時通訊新到Java,ü可以請告訴我一個代碼示例?感謝您的幫助 – ibm123 2012-02-16 16:12:02
因爲您是java的新手,所以我在此示例中添加了如何使用正則表達式的新答案。那個怎麼樣? – ZehnVon12 2012-02-17 08:52:13
感謝您的努力,我將回顧您的回答 – ibm123 2012-02-19 09:34:22