2012-09-23 35 views
0

我的任務是區分XML內容到組, 例如 我有兩個XML文件如何分類的XML文件基礎上在c中使用的libxml2

<?xml version="1.0"?> 
<marks> 
<firstname>john</firstname> 
<lastname>peter</lastname> 
<subject name="english" marks="30">pass</heading> 
</marks> 

<?xml version="1.0"?> 
<marks> 
<firstname>james</firstname> 
<lastname>cameron</lastname> 
<subject name="english" marks="30" degree="masters">pass</heading> 
</marks> 

屬性,所以我需要解析上面的例子中的XML文件並且需要將它們劃分爲組,並計算出碩士生,博士生,學士學生的數量

每個組將具有元素部分中的其他屬性,如碩士學生主題元素「將具有物業學位對於博士生來說,他們會擁有特定的財產alization

我可以得到xml文件的屬性並在c函數中對它進行編碼,說如果我們有屬性名稱度數認爲它們是碩士學生,但是有沒有其他方式如 構建基於xml請求的DTD並只使用libxml2來驗證DTD和區分請求(我必須通過使用libxml2庫找出它,還不知道)

隨着不同類型的XML請求數量的增加,我無法對它們進行硬編碼寫多個if循環。

將有可能只是創建特定類型的請求,並只用一行代碼來驗證針對該請求的DTD,但現在肯定是真的有可能..

要求你給你的想法。

回答

0

我明白標題給出的問題:「如何通過在c中使用libxml2 xml解析來驗證基於DTD的xml」。這很容易回答。它實際上是Dtd validation with libxml2的副本,因此應該關閉。

但後來的描述和事實證明,這個問題是完全不同的。您可能需要一些關於您的項目設計的幫助。也許你應該改變標題?

至於你的設計:你爲什麼不想用if s?您希望可以在不重新編譯應用程序的情況下更改它?所以你需要把所有的情況放在一個配置文件中。閱讀文件並採取相應措施。

試圖回答的設計部分:

的各種要求也將做一個單獨的DTD,但你將不得不驗證XML對DTD順序所有。如果性能成本可以接受,那麼你可以這樣做。所有的dtds(或xsd模式)都可以在初始化階段讀入內存,然後在xml示例中嘗試,直到它被驗證。

要檢查xml是否包含給定元素中給定的屬性,您也可以使用libxml中的XPath。見this questionXPath examples。請注意0​​的使用情況。

+0

感謝您的回答,現在我明白,即使對不同的DTD進行驗證也需要大量資源,爲每種類型的XML請求編寫簡單的邏輯要容易得多。 –

+0

不客氣。知道你更喜歡這種方式,我也添加了一個XPath使用的建議。 – Jarekczek

相關問題