2010-06-22 17 views
1

我在我的代碼中處於一種奇怪的狀態。我正在編寫一個Apache模塊,需要在響應文檔的頭標中添加註釋(除了做一些其他不重要的東西外)。決定是否使用DOM,SAX或XPath的因素

在我需要解析響應文檔的時候,我將整個文檔以char *緩衝區的形式存儲在內存中(我正在使用C)。所以我不太確定選擇哪個API?

DOM就我所知,會在文檔的內存樹表示中創建它自己的。我可以通過釋放早期的緩衝區來節省一些內存空間。

SAX:我真的不太明白。

XPath-正如我已經搜索過的,我相信它只能用於檢索元素值。如果這是真的,那麼它就沒有用處。

給我一些見解,因爲什麼最適合當前的情況?

回答

1

在使用XML(或HTML)和Apache方面,如果您做了足夠簡單的事情,例如向文檔中的特定位置插入註釋,那麼使用XSL可能會更高效。這本身就是處理XML風格的文檔,其中HTML和XHTML是一個子集,不需要將它們轉換爲其他格式,以便更容易地與其他編程語言一起工作。另一方面,DOM和SAX解析分別以更容易處理的方式考慮XML文檔,可以通過將其轉換爲您的特定語言的本地對象,或分別註冊代碼可以處理的「事件」 。請致電http://www.w3schools.com/xsl/

一個額外的想法 - 如果您確實在做一些基本的事情,比如向頭部添加評論,那麼使用SAX解析比DOM解析更有效,因爲簡單編輯不應該需要解析整個文檔。通過等待達到「head」元素的適當事件,然後向其添加所需的任何內容,它寧可更優雅地處理。

+0

謝謝!我會嘗試使用SAX,libxml2爲DOM提供了大量的代碼示例,但是沒有一個適用於SAX,所以它使得使用SAX有點困難! – 2010-06-22 17:18:42

1

DOM和SAX是「解析數據的方式」。 DOM解析整個文檔並生成數據結構。 SAX解析文檔「逐個元素」,讓你知道什麼時候遇到一些有趣的事情,並希望你處理它。

XPath是一種在DOM文檔中引用數據的方法。也就是說,「第一個節點」等。它非常強大和美妙,但不用於解析。

只要使用方便,DOM遠遠優越。但是,在很多情況下它會慢得多,並佔用更多的內存。

對於我來說,我認爲都是基於是否使用DOM會影響我的應用程序的緩慢和內存膨脹的事情:

  • 我是不是解析非常大的文件(S)?
  • 我解析很多很多東西嗎?
  • 速度究竟有影響嗎?

另外值得注意的是,如果您選擇使用DOM,請確保您研究了哪些庫在那裏。一個不好的庫可能比一個好的庫慢10倍到100倍。

1

關於DOM vs SAX,請記住,DOM爲您的處理增加了延遲。

DOM更容易,因爲它會自動創建一個結構。在這個結構中,你將添加你想要的數據,然後你將能夠從DOM結構中生成char *緩衝區。但是你必須認識到你需要完全創建結構,然後才能添加數據,只有這樣你才能將它轉換回char *發送它。這是延遲添加的地方。

使用SAX是更多的工作。您在XML上工作。您甚至不必等待完整的char *數據才能開始工作。一旦元素啓動,就可以立即檢測文檔中的哪個位置,並且可以即時注入您的其他數據。增加的延遲非常少,並且沒有數據重複。

我對XPath知之甚少,但對解析沒用。