這里的邏輯是:如果頁面元素不包含“| kasteeltype”則洗掉頁面元素,否則保留頁面元素。
#Import ElementTree
import defusedxml.ElementTree as ET
#Set Tree & Root
tree = ET.parse("nlwiki-20221020-pages-meta-current1.xml-p1p134538")
root = tree.getroot()
#Namespaces
NSPage = "{http://www.mediawiki.org/xml/export-0.10/}page"
NSRevision = "{http://www.mediawiki.org/xml/export-0.10/}revision"
NSText = "{http://www.mediawiki.org/xml/export-0.10/}text"
#Modify XML
for page in root.findall(NSPage):
for revision in page.findall(NSRevision):
text = revision.find(NSText)
kasteeltype = "| kasteeltype"
if kasteeltype not in text.text:
root.remove(page)
#Output
tree.write("output.xml")
此代碼導致以下錯誤訊息:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In [8], line 18
16 text = revision.find(NSText)
17 kasteeltype = "| kasteeltype"
---> 18 if kasteeltype not in text.text:
19 root.remove(page)
20 else:
TypeError: argument of type 'NoneType' is not iterable
我現在對如何進行有點不知所措。
XML 檔案可以在這里找到:https ://dumps.wikimedia.org/nlwiki/20221020/nlwiki-20221020-pages-meta-current1.xml-p1p134538.bz2
這是一個相當大的檔案,因為它是一個維基百科轉儲。
預期的結果應該是所有在父修訂下的文本元素中不包含字串“| kasteeltype”的頁面元素都應該被洗掉。
uj5u.com熱心網友回復:
驗證是否找到該元素
pages = root.findall(NSPage)
if pages is not None:
for page in pages:
revisions = page.findall(NSRevision)
if revisions is not None:
for revision in revisions:
text = revision.find(NSText)
if text is not None and text.text is not None:
kasteeltype = "| kasteeltype"
if kasteeltype not in text.text:
root.remove(page)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/521258.html
標籤:Pythonxml元素树
上一篇:使用lxml從XML匯入資料
