首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分XML文件- Python 3

拆分XML文件- Python 3
EN

Stack Overflow用户
提问于 2020-07-29 21:21:10
回答 1查看 139关注 0票数 1

我对python 3很陌生,我试图将一个XML文件分割成多个有效的XML文件,并为每个文件复制头部(第一个

输入示例:

代码语言:javascript
复制
<?xml version="1.1" encoding="UTF-8" standalone="no"?> 
<databaseChangeLog xmlns="http://www.namespacedbchangelog" xmlns:ext="http://www.namespace-ext" xmlns:xsi="http://namespaceXMLSchema-instance" xsi:schemaLocation="http://www.namespacedbchangelog-ext http://www.namespacedbchangelog-ext.xsd http://www.namespacedbchangelog http://www.namespacedbchangelog/dbchangel.xsd">
    <changeSet author="oracle (generated)" id="1594342324345277">
        <createView fullDefinition="true" viewName="VIEW1">
            CONTENTS OF THE VIEW
       </createView>
    </changeSet>
    <changeSet author="oracle (generated)" id="159423231995822477">
        <createTable tableName="TEST1">
            CONTENTS OF THE TABLE
        </createTable>
    </changeSet>
    <changeSet author="oracle (generated)" id="1534129423123477">
        <createTable tableName="TEST2">
            CONTENTS OF THE TABLE
        </createTable>
    </changeSet>
</databaseChangeLog>

输出1文件名: 1594342324345277-createView-VIEW1.xml

代码语言:javascript
复制
<?xml version="1.1" encoding="UTF-8" standalone="no"?> 
<databaseChangeLog xmlns="http://www.namespacedbchangelog" xmlns:ext="http://www.namespace-ext" xmlns:xsi="http://namespaceXMLSchema-instance" xsi:schemaLocation="http://www.namespacedbchangelog-ext http://www.namespacedbchangelog-ext.xsd http://www.namespacedbchangelog http://www.namespacedbchangelog/dbchangel.xsd">
    <changeSet author="oracle (generated)" id="1594342324345277">
        <createView fullDefinition="true" viewName="VIEW1">
            CONTENTS OF THE VIEW
       </createView>
    </changeSet>
</databaseChangeLog>

输出2文件名: 159423231995822477-createTable-TEST1.xml

代码语言:javascript
复制
<?xml version="1.1" encoding="UTF-8" standalone="no"?> 
<databaseChangeLog xmlns="http://www.namespacedbchangelog" xmlns:ext="http://www.namespace-ext" xmlns:xsi="http://namespaceXMLSchema-instance" xsi:schemaLocation="http://www.namespacedbchangelog-ext http://www.namespacedbchangelog-ext.xsd http://www.namespacedbchangelog http://www.namespacedbchangelog/dbchangel.xsd">
    <changeSet author="oracle (generated)" id="159423231995822477">
        <createTable tableName="TEST1">
            CONTENTS OF THE TABLE
        </createTable>
    </changeSet>
</databaseChangeLog>

输出3:文件名: 1534129423123477-createTable-TEST2.xml

代码语言:javascript
复制
<?xml version="1.1" encoding="UTF-8" standalone="no"?> 
<databaseChangeLog xmlns="http://www.namespacedbchangelog" xmlns:ext="http://www.namespace-ext" xmlns:xsi="http://namespaceXMLSchema-instance" xsi:schemaLocation="http://www.namespacedbchangelog-ext http://www.namespacedbchangelog-ext.xsd http://www.namespacedbchangelog http://www.namespacedbchangelog/dbchangel.xsd">
    <changeSet author="oracle (generated)" id="1534129423123477">
        <createTable tableName="TEST2">
            CONTENTS OF THE TABLE
        </createTable>
    </changeSet>
</databaseChangeLog>

谢谢你!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 00:02:38

这里有个解决办法。

代码语言:javascript
复制
from simplified_scrapy import SimplifiedDoc, utils, req
xml = '''
<?xml version="1.1" encoding="UTF-8" standalone="no"?> 
<databaseChangeLog xmlns="http://www.namespacedbchangelog" xmlns:ext="http://www.namespace-ext" xmlns:xsi="http://namespaceXMLSchema-instance" xsi:schemaLocation="http://www.namespacedbchangelog-ext http://www.namespacedbchangelog-ext.xsd http://www.namespacedbchangelog http://www.namespacedbchangelog/dbchangel.xsd">
    <changeSet author="oracle (generated)" id="1594342324345277">
        <createView fullDefinition="true" viewName="VIEW1">
            CONTENTS OF THE VIEW
       </createView>
    </changeSet>
    <changeSet author="oracle (generated)" id="159423231995822477">
        <createTable tableName="TEST1">
            CONTENTS OF THE TABLE
        </createTable>
    </changeSet>
    <changeSet author="oracle (generated)" id="1534129423123477">
        <createTable tableName="TEST2">
            CONTENTS OF THE TABLE
        </createTable>
    </changeSet>
</databaseChangeLog>
'''
doc = SimplifiedDoc(xml)
databaseChangeLog = doc.databaseChangeLog # Get root node
changeSets = databaseChangeLog.selects('changeSet')
for changeSet in changeSets:
    child = changeSet.child # Get the child node
    fileName = "{0}-{1}-{2}.xml".format(changeSet.id, child.tag,
                                        child['viewName'] or child['tableName'])
    databaseChangeLog.setContent(changeSet) # Replace node
    utils.saveFile(fileName, doc.html) # Save file
    print (fileName)

Reslut:

代码语言:javascript
复制
1594342324345277-createView-VIEW1.xml
159423231995822477-createTable-TEST1.xml
1534129423123477-createTable-TEST2.xml

下面是更多的示例:https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63162600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档