2010-07-13 96 views
3

予有需要解析部分XML片段(其被表示爲的std :: string),解析部分XML當此如一個過濾出的命名空間錯誤xmlDoc libxml2中的對象,並且由於這些是片段,我不斷將namespace error : Namespace prefix FOO on node is not defined錯誤吐出到STDERR中。經由libxml2的在C++

我在尋找的是一種只過濾這些命名空間警告或將XML片段直接解析爲xmlNode對象的方法。

我認爲用initGenericErrorDefaultFunc()進行某種黑客攻擊可能是第一種方式,但libxml2的文檔絕對是非常殘酷的。

坦率地說,我寧願選擇第二種方法,因爲它不需要錯誤黑客行爲,而且節點已經知道命名空間,但我認爲這是不可能的,因爲節點必須具有根和XML片段不保證只有一個根。

我只需要在這裏指導一下如何擺脫名稱空間錯誤警告。

非常感謝。

+0

您無法創建片段的上下文以使錯誤合法消失? – Potatoswatter 2010-08-25 04:58:10

回答

3

建立在@Potatoswatter所說的......你能創建一個片段的上下文嗎?例如。串聯

<dummyRoot xmlns:FOO="dummy-URI"> 
在片段的前

,和

</dummyRoot> 

之後,然後級聯字符串傳遞給xmlParseMemory()。

或者,您爲什麼不使用xmlParseInNodeContext(),它允許您傳遞一個節點作爲上下文(包括名稱空間),並且內容可以是任何平衡良好的塊(例如,沒有單個根元素的多個元素)。

這兩種方法都要求您知道或可以掃描以找出該片段可能使用的所有可能的名稱空間前綴的集合。

+0

我認爲xmlParseInNodeContext() )是關鍵。它專爲解析文檔片段而設計,這就是你所擁有的。 – 2010-08-31 11:08:10

0

是不是將xmlParserOptions XML_PARSE_NOERROR和/或XML_PARSE_NOWARNING傳遞給解析器的選項?

+0

我不想刪除所有錯誤 - 只是具體的錯誤。我使用xmlParseMemory(),它不採取xmlParserOption參數(爲什麼heck有xmlParseMemory()和xmlReadMemory()這兩個似乎在做幾乎相同的事情?) – 2010-08-25 22:47:43