[英]How to check xmlns in every element using lxml
我正在使用lxml檢查Product元素,因為它們在MapReduce作業中流式傳輸。 我試圖確保每個元素中僅存在正確的xmlns值。 例如,每個Product元素都應將xmlns設置為“ http://mynetwork.products.com/new ”:
<Product xmlns="http://mynetwork.products.com/new">
當我檢查每個Product元素(一次流式傳輸)時,我只想確保它看起來像上面的一樣。 我想檢查以下潛在錯誤:
<Product xmlns="http://mynetwork.products.com/old">
<Product xmlns="">
<Product>
<Product xmlns="http://mynetwork.products.com/new" something="else">
我嘗試為每個元素(這是一個字典)存儲Product.nsmap的值,然后讀取字典的值進行驗證,但是這無助於我發現以下任何一種情況。 一定有辦法。
您可以檢查每個Product
元素的nsmap
和attrib
屬性的組合。 nsmap
應該僅包含一個鍵值對,即鍵None
,其值應為"http://mynetwork.products.com/new"
,並且attrib
應該為空,因為您不允許該元素中的任何屬性。
簡短示例(pyhon 2.7):
>>> from lxml import etree
>>> raw = '''<root>
... <Product xmlns="http://mynetwork.products.com/new"/>
... <Product xmlns="http://mynetwork.products.com/new" something="else"/>
... <Product xmlns="http://mynetwork.products.com/old" />
... <Product xmlns=""/>
... <Product/>
... </root>'''
...
>>> root = etree.fromstring(raw)
>>> for p in root.findall('*'):
... isValid = len(p.nsmap) == 1 \
... and p.nsmap[None] == 'http://mynetwork.products.com/new' \
... and not p.attrib
... print isValid
...
True
False
False
False
False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.