簡體   English   中英

如何從 python 中的一個 XML 文件創建兩個 XML 文件

[英]How to create two XML files from one XML files in python

我有這個 XML 文件

<Source>
    <segment1>
        <userRefNumber>test1</userRefNumber>
        <subscriber>
            <industryCode>ZZZZZ</industryCode>
            <memberCode>12345</memberCode>
            <inquirySubscriberPrefixCode>0622</inquirySubscriberPrefixCode>
        </subscriber>
        <options>
            <country>us</country>
            <language>en</language>
        </options>
        <tracking>
            <transactionTimeStamp>2021-02-25T04:09:30.508-06:00</transactionTimeStamp>
        </tracking>
    </segment1>
    <example2>
        <subscriber>
            <industryCode>ZAAAA</industryCode>
            <memberCode>999999</memberCode>
            <inquirySubscriberPrefixCode>0622</inquirySubscriberPrefixCode>
        </subscriber>
        <options>
            <country>us</country>
            <language>en</language>
        </options>
        <tracking>
            <transactionTimeStamp>2020-02-25T04:09:30.508-06:00</transactionTimeStamp>
        </tracking>
    </example2>
</Source>

我想通過 Python 創建兩個 XML 文件,每個孩子一個:

  • 段 1 的一個 xml 文件
  • 一個 xml 文件用於 segment2

xml1 應如下所示:

<Source>
    <segment1>
        <userRefNumber>test1</userRefNumber>
        <subscriber>
            <industryCode>ZZZZZ</industryCode>
            <memberCode>12345</memberCode>
            <inquirySubscriberPrefixCode>0622</inquirySubscriberPrefixCode>
        </subscriber>
        <options>
            <country>us</country>
            <language>en</language>
        </options>
        <tracking>
            <transactionTimeStamp>2021-02-25T04:09:30.508-06:00</transactionTimeStamp>
        </tracking>
    </segment1>
</Source>

和 xml2 應該是這樣的:

<Source>
    <example2>
        <subscriber>
            <industryCode>ZAAAA</industryCode>
            <memberCode>999999</memberCode>
            <inquirySubscriberPrefixCode>0622</inquirySubscriberPrefixCode>
        </subscriber>
        <options>
            <country>us</country>
            <language>en</language>
        </options>
        <tracking>
            <transactionTimeStamp>2020-02-25T04:09:30.508-06:00</transactionTimeStamp>
        </tracking>
    </example2>
</Source>

拆分標准是這樣的:為每個元素創建一個單獨的 xml 文件。 在上面的示例中有兩個元素(segment1 和 example2):因此我想為每個元素創建兩個 xml 文件。

我已經檢查了這個答案Split one large.xml file in more.xml files (python)但在那個例子中,孩子們有相同的名字所以我猜 findall function 不適用於我的情況,因為孩子們有不同的名字(段 1 和段 2)。 是否可以根據根元素的順序創建單個 xml 文件?

以下似乎有效。 這里的要點是遍歷元素並檢查其中哪一個以segment開頭

import xml.etree.ElementTree as ET

xml = '''<Source>
    <document>response</document>
    <version>2.0</version>
    <segment1>
        <userRefNumber>test1</userRefNumber>
        <subscriber>
            <industryCode>ZZZZZ</industryCode>
            <memberCode>12345</memberCode>
            <inquirySubscriberPrefixCode>0622</inquirySubscriberPrefixCode>
        </subscriber>
        <options>
            <country>us</country>
            <language>en</language>
        </options>
        <tracking>
            <transactionTimeStamp>2021-02-25T04:09:30.508-06:00</transactionTimeStamp>
        </tracking>
    </segment1>
    <segment2>
        <userRefNumber>test2</userRefNumber>
        <subscriber>
            <industryCode>ZAAAA</industryCode>
            <memberCode>999999</memberCode>
            <inquirySubscriberPrefixCode>0622</inquirySubscriberPrefixCode>
        </subscriber>
        <options>
            <country>us</country>
            <language>en</language>
        </options>
        <tracking>
            <transactionTimeStamp>2020-02-25T04:09:30.508-06:00</transactionTimeStamp>
        </tracking>
    </segment2>
</Source>'''

root = ET.fromstring(xml)
counter = 1
for child in list(root):
    if child.tag.startswith('segment'):
        src = ET.Element('Source')
        src.append(child)
        with open(f'out_{counter}.xml','w') as f:
            tree = ET.ElementTree(src)
            tree.write(f,encoding="unicode")
        counter += 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM