[英]remove empty tags and the parent if empty as well from xml using python
我是 python 的新手,並嘗試使用 lxml 從 XML 中刪除空標簽。 我想擺脫所有空元素,如果這樣做,父元素也是空的,我也想刪除它。
實際 XML
<magento_api>
<data_item>
<code>400</code>
<message>Attribute weight is not applicable for product type Configurable Product</message>
</data_item>
<data_item>
<code></code>
<message>Resource data pre-validation error.</message>
</data_item>
<data_item>
<code>1</code>
<message></message>
</data_item>
<data_item>
<code></code>
<message></message>
</data_item>
</magento_api>
改裝 XML
<magento_api>
<data_item>
<code>400</code>
<message>Attribute weight is not applicable for product type Configurable Product</message>
</data_item>
<data_item>
<message>Resource data pre-validation error.</message>
</data_item>
<data_item>
<code>1</code>
</data_item>
</magento_api>
我使用了類似下面的東西,但它不起作用
from lxml import etree
def recursively_empty(xml_element):
if xml_element.text:
return False
return all((recursively_empty(xe) for xe in xml_element.iterchildren()))
data = """
<magento_api>
<data_item>
<code>400</code>
<message>Attribute weight is not applicable for product type Configurable Product</message>
</data_item>
<data_item>
<code>400</code>
<message></message>
</data_item>
<data_item>
<code></code>
<message>abc</message>
</data_item>
<data_item>
<code></code>
<message></message>
</data_item>
</magento_api>
"""
xml_root = etree.fromstring(data)
for action, xml_element in xml_root:
parent = xml_element.getparent()
if recursively_empty(xml_element):
parent.remove(xml_element)
print (etree.tostring(xml_root))
您可以做的一件事是在每個元素上使用normalize-space()
xpath function 來獲取字符串值。 如果為空,則刪除該元素。
例子...
Python (注意:我使用了您的“實際 XML”示例;不是您在 Python 中使用的 XML。)
from lxml import etree
data = """
<magento_api>
<data_item>
<code>400</code>
<message>Attribute weight is not applicable for product type Configurable Product</message>
</data_item>
<data_item>
<code></code>
<message>Resource data pre-validation error.</message>
</data_item>
<data_item>
<code>1</code>
<message></message>
</data_item>
<data_item>
<code></code>
<message></message>
</data_item>
</magento_api>
"""
parser = etree.XMLParser(remove_blank_text=True)
xml_root = etree.fromstring(data, parser=parser)
for xml_element in xml_root.iter():
content = xml_element.xpath('normalize-space()')
if not content:
xml_element.getparent().remove(xml_element)
print(etree.tostring(xml_root, pretty_print=True).decode())
Output
<magento_api>
<data_item>
<code>400</code>
<message>Attribute weight is not applicable for product type Configurable Product</message>
</data_item>
<data_item>
<message>Resource data pre-validation error.</message>
</data_item>
<data_item>
<code>1</code>
</data_item>
</magento_api>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.