我正在使用SAX解析一些大型的XML文件,我想問以下問題:XML文件具有複雜的結構。如下所示:Java Sax解析複雜的大型XML文件
<library>
<books>
<book>
<title></title>
<img>
<name></name>
<url></url>
</img>
...
...
</book>
...
...
</books>
<categories>
<category id="abcd">
<locations>
<location>...</location>
</locations>
<url>...</url>
</category>
...
...
</categories>
<name>...</name>
<url>...</url>
</library>
事實是這些文件每個都超過50MB,並且在不同的上下文中重複了很多標籤。 url/books/book/img下,還可以在/ library下和/ library/categories/category下等。
我的SAX解析器使用DefaultHandler的子類,其中我重寫了startElement和endElement方法(等等)。但問題在於,由於這些XML文件的業務邏輯,這些方法在代碼行方面非常龐大。我用了很多
if ("url".equalsIgnoreCase(qName)) {
// peek at stack and if book is on top
// ...
// else if category is on top
// ...
} else if (....) {
}
我想知道是否有更正確/正確/優雅的方式來執行XML解析。
謝謝大家
也許XSLT會很有用。它的聲明語法似乎更適合於你所擁有的「模式匹配」。但由於在XSLT中進行處理的限制,您可能必須使用擴展功能和/或元素。否則,您可能需要考慮使用規則引擎(例如Drools或其他Rete算法實現)來根據輸入匹配執行業務邏輯。 –
SAX解析是非常難以編碼的,特別是對於複雜結構的xml?你看過vtd-xML嗎?它保留了DOM的大部分好處,沒有內存/處理開銷...... –