![](/img/trans.png)
[英]How do I take elements from diffrent XML files to create a new one through python?
[英]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 文件,每個孩子一個:
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.