2012-06-07 58 views
0

我試圖反覆解析樹,並在最後的校驗,使用:<Signature value="e?'O;????5?u??c???]????<??jX" />ParseError無效字符與cElementTree

我以爲elem.clear()

import xml.etree.cElementTree as et 
for event, elem in et.iterparse("C:\myXMLfile.xml"): 
    if elem.tag == "Signature": 
     elem.clear() 

這在這個角色引起了ParseError: reference to invalid character number: line 4205, column 25聲明將是一種解決方法,但它似乎是在清理之前處理屬性。有沒有辦法可以清除這個元素而不先處理它?

回答

1

這裏就是我清盤做:

  1. 讀取XML文件作爲文本到內存中。
  2. 使用正則表達式來查找標籤。
  3. 刪除開始標籤和結束標籤之間的所有內容。
  4. 重寫爲XML文件。
  5. 解析新的XML文件。
  6. 去我的快樂方式。
0

查看definition of xml.etree.cElementTree.iterparse,您會注意到有事件的可選參數,您可以在「開始」事件(默認爲「結束」事件)上報告。您可以利用它在開始事件之後執行elem.clear(),並繼續以雙分支語句if結束事件。

+0

我已經更改了代碼,以便它現在:for事件,elem在et.iterparse(「C:\ myXMLfile.xml」)中:if event ==「start」and elem.tag == 「簽名」:elem.clear()' 不幸的是,這產生了相同的結果。 – JMarotta

+0

我能想到的唯一選擇就是迭代並移除Signature標籤,然後執行iterparse。這會對性能產生微不足道的影響,因爲它仍然是相同的順序。 –

+0

我明白你的意思了。在這種情況下,我不確定如何實現它。顯然'開始'事件尋找開始標籤的結束「>」。 至於去除'Signature'標籤,我認爲這就是我必須要做的,儘管我不確定如何最好地做到這一點,除了逐行文件寫入。 – JMarotta