我是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))
可以做的一件事是对每个元素使用^{} xpath函数来获取字符串值。如果为空,请删除该元素
例如
Python(注意:我使用了您的“实际XML”示例;而不是Python中的XML。)
输出
相关问题 更多 >
编程相关推荐