我有java服務,應該收到一個包含多個元素的xml文件。我需要分析這個文件提取匹配的元素,並將它們發送到他們的相關服務。如何分析一個XML文件?
我希望找到一個輕鬆的方式來做到這一點,因爲它是一個沉重的XML文件。
任何人都知道一個java框架或解決方案,可以幫助執行?
感謝
我有java服務,應該收到一個包含多個元素的xml文件。我需要分析這個文件提取匹配的元素,並將它們發送到他們的相關服務。如何分析一個XML文件?
我希望找到一個輕鬆的方式來做到這一點,因爲它是一個沉重的XML文件。
任何人都知道一個java框架或解決方案,可以幫助執行?
感謝
定義你的自定義規則來讀取XML文件,並調用方法或創建對象來解組。
/students/student -> new Student();
/students/student/name -> invoke setName(name) for student
/students/student -> invoke addStudent(student) for each student
一切都是可選的,你定義一個http://commons.apache.org/digester這種需求
測試, example在http://www.javaworld.com/javaworld/jw-10-2002/jw-1025-opensourceprofile.html?page=2和example。
XPath可能是一個很好的解決方案。以下是API文檔的鏈接,但您也可以找到許多不同的教程和入門指南。只需在Google上搜索「Java XPath教程」或類似內容即可。
http://download.oracle.com/javase/1,5.0/docs/api/javax/xml/xpath/package-summary.html
有可能的XPath可能更適合您的需求的其他幾個實現,所以這將是值得關注其他開源實現。
不過,他需要有一種應用XPath表達式的方法。在Java中直接使用XPath通常意味着構建一個DOM,這將對大型XML文檔造成沉重的內存損失。 –
是的,我想避免將XML文件解組爲Java對象,因爲它將使用大量內存 – achraf
我不知道有關Java XPath API的大量信息,但我不認爲XPath的所有實現都需要您加載整個XML圖形一次寫入內存。內核中的XPath實際上並不需要您將整個輸入或輸出一次加載到內存中,這可能只是一個實現細節。 Java SDK中的XPath impl可能會這樣做,但是您可能能夠找到對大型輸入文件更好的impls。我的答案旨在提供一個選項來看,可能會有性能影響,會導致您尋找其他東西。 –
將它傳遞給XSLT樣式表。 Java XSLT實現非常好,將輸入樹保持在最低限度,並且通常使用(至少默認情況下)字節碼編譯,而不是解釋來使轉換真的很快。匹配輸入和生成所需的輸出正是XSLT適用的聲明式風格。
使用JDOM,它小巧,快速,易於使用。
嘗試VTD-XML,它比JDOM(高達10x),DOM4J或DOM以及內存高效得多。請參閱VTD-XML Wikipedia Entry以獲取更多信息
該文件有多大? (文件大小,元素數量)。如果它在Web服務中通過線路,它應該太大(<25Mb)。常規的XML DOM解析器適用於大多數25Mb的文件,然後考慮SAX。它必須是一個超過SAX功能的大文件(> 1Tb)。 –
嘗試vtd-xml,您不會對此感到失望。 –