【问题标题】:Parse XML files with null attributes in python在python中解析具有空属性的XML文件
【发布时间】:2018-07-28 16:22:51
【问题描述】:

我在 xml 文件中有很多行,我正在尝试编写一个 Python 脚本,该脚本将遍历这些行并将空属性更新为 AWS 格式。例如,我的树看起来像:

<TRANSFORMATION>
<ID_RSSD_PREDECESSOR>28</ID_RSSD_PREDECESSOR><ID_RSSD_SUCCESSOR>75026</ID_RSSD_SUCCESSOR>
<D_DT_TRANS/>
</TRANSFORMATION>

https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-xml

如何访问具有空值 (&lt;D_DT_TRANS/&gt;) 的属性并更新为:

&lt;D_DT_TRANS&gt;&lt;/D_DT_TRANS&gt;

【问题讨论】:

    标签: xml python-3.x xml-parsing


    【解决方案1】:

    您可以使用 BeautifulSoup 来解析/修改 XML 文档。此示例将使用零内容填充所有标签并向它们插入空字符串 - 有效地将 &lt;tag/&gt; 扩展为 &lt;tag&gt;&lt;/tag&gt;

    data = """<TRANSFORMATION>
    <ID_RSSD_PREDECESSOR>28</ID_RSSD_PREDECESSOR><ID_RSSD_SUCCESSOR>75026</ID_RSSD_SUCCESSOR>
    <D_DT_TRANS/>
    </TRANSFORMATION>"""
    
    from bs4 import BeautifulSoup
    
    xml_data = BeautifulSoup(data, 'xml')
    
    for tag in xml_data.find_all(lambda t: len(t.contents) == 0):
        tag.string = ""
    
    print(xml_data.prettify())
    

    这将打印:

    <?xml version="1.0" encoding="utf-8"?>
    <TRANSFORMATION>
     <ID_RSSD_PREDECESSOR>
      28
     </ID_RSSD_PREDECESSOR>
     <ID_RSSD_SUCCESSOR>
      75026
     </ID_RSSD_SUCCESSOR>
     <D_DT_TRANS>
     </D_DT_TRANS>
    </TRANSFORMATION>
    

    【讨论】:

    • 这确实可行,但如果 XML 文件非常大,则需要很长时间才能完成。
    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多