2009-11-28 117 views
0

我在C++中構建了一個符合和驗證的XML解析器,並試圖使它在Pocket PC中使用輕量級。XML解析和使用

在開始的時候,我決定一些「事件」添加到我的解析器像SAX那樣,通知有關的元素,處理指令等

此事件採取的派生類的生成的DOM樹XML。

當試圖主要處理實體(如果定義的話可以包含元素,pi和註釋以及它們的解析度),我會產生懷疑。

例如,我可以創建一個XMLEntityRef類,它引用某個XMLDocType對象中定義的某個XMLEntity,如.NET system.xml解析器所做的。

據我所知,對於大多數用途,應用程序需要知道元素,其內容,各自的屬性和它們各自的值......只有字符串......它不關心元素內容是否由cdata對象,實體引用和/或純文本...同樣適用於屬性值。

所以,我的問題如下:當每個xml對象出現時,將其傳遞給應用程序以及讓它(或助手類)通過連接文本構建結果屬性的值以及解決實體引用?

如果我正在進行民意調查,請回答:您的應用程序是否需要了解cdata標記以及它們位於xml文件中的位置,或者讓事情變得簡單......您想知道完整的內容值在字符串中的元素,而不用擔心它是如何構建的?

此致 莫羅H. Leggieri

回答

1

我建立一個符合並驗證XML解析器在C++中,並試圖使其重量輕

有作爲合格的輕量沒有這樣的事情(從來不介意確認)語法分析器。要成爲一個合格的解析器,你必須瞭解所有可以在DTD外部子集中使用的東西,這確實很麻煩。 XML規範最終被所有的SGML DTD壓縮歸咎於它是令人遺憾的,但我們現在仍然堅持使用它。

您的應用程序需要知道CDATA標籤和它們的位置在xml文件

通常沒有。 DOM Level 3 LS默認要求CDATA節在默認情況下保留DOM中的CDATASection節點,但幾乎沒有應用程序在意。

(如果問題是關於應用程序然後是的,因爲我的應用是保持CDATA節,他們是一個模板系統。但仍。)

我懷疑試圖主要處理實體

神是時,會出現。實體引用是一場完全災難。使DOM實現以符合DOM Level 3 Core/LS的方式支持它們非常複雜。儘可能避免。

+0

呃...輕量級我試圖在一些實現中看到代碼的差異。 Xerces代碼(不包括io東西等)比system.net的mono.net實現更大。但是,就像你說的,人們可以製作完全符合3級標準的解析器。那麼......哪種類型的應用程序真的可以利用不包含xml編輯器的dom l3結構? – 2009-11-29 04:02:07

+0

很少,但不幸的是,你必須實現大部分毛茸茸的DTD東西,才能獲得最簡單的XML解析器。這是一種恥辱,XML將無用的DTD廢話從SGML中拖出來;我希望在那裏成爲輕量級工作的XML的標準簡化子集,放棄所有文檔類型的東西(以及默認屬性和所有實體),並允許僅在根元素上進行名稱空間聲明。 – bobince 2009-11-29 21:53:13

+0

是的......它應該存在一個輕量級的規範......謝謝 – 2009-11-30 23:08:13

1

通常XML是重量不輕。你最好用JSON。

+0

是的,因爲用於C/C++的json庫「非常好」...在web開發中,我10000%同意你的觀點。關於其他主題? mmmm,並非如此。 – elcuco 2009-11-28 22:37:32

+0

誰對圖書館有什麼看法?無論如何,他想要對自己的權利。除了數據是數據。無論是網頁開發還是「其他主題」。 XML和JSON只是正式定義要傳輸的數據的一種方式。 – 2009-11-28 22:57:42

1

構建解析器時,我不認爲應該假定應用程序將如何使用xml,而是爲每個xml節點提供最細化的數據級別以提供最大的靈活性。雖然這可能需要消費應用程序的更多工作,但他們將能夠完成他們需要的任何事情。祝你好運。

+0

謝謝你,比爾。 – 2009-11-29 03:50:54