繁体   English   中英

在给定标签处将XML文件拆分为多个

Splitting XML file into multiple at given tags

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想将XML文件拆分成多个文件。 我的工作站非常受限于带有Xalan 2.7.1的Eclipse Mars。

我也可以使用Python,但以前从未使用过它。

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <row>
        <NAME>Doe</NAME>
        <FIRSTNAME>Jon</FIRSTNAME>
        <GENDER>M</GENDER>
    </row>
    <row>
        <NAME>Mustermann</NAME>
        <FIRSTNAME>Max</FIRSTNAME>
        <GENDER>M</GENDER>
    </row>
</root>

我怎样才能将它们变换为这样

<?xml version="1.0" encoding="UTF-8"?>
    <root>
        <row>
            <NAME>Doe</NAME>
            <FIRSTNAME>Jon</FIRSTNAME>
            <GENDER>M</GENDER>
        </row>
    </root>

我需要在带有标题的单个文件中的每个“行”数据。 上面的数据只是一个例子。 大多数“行”数据都有16个属性,但它会不时变化。

3 个回复

使用Python ElementTree。

创建一个文件,例如xmlsplitter.py。 添加下面的代码(其中file.xml是您的xml文件,并假设每一行都有一个唯一的NAME元素。)。

import xml.etree.ElementTree as ET
context = ET.iterparse('file.xml', events=('end', ))
for event, elem in context:
    if elem.tag == 'row':
        title = elem.find('NAME').text
        filename = format(title + ".xml")
        with open(filename, 'wb') as f:
            f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
            f.write(ET.tostring(elem))

运行它

python xmlsplitter.py

或者,如果名称不是唯一的:

import xml.etree.ElementTree as ET
context = ET.iterparse('file.xml', events=('end', ))
index = 0
for event, elem in context:
    if elem.tag == 'row':
        index += 1
        filename = format(str(index) + ".xml")
        with open(filename, 'wb') as f:
            f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
            f.write(ET.tostring(elem))

这是完美的代码。

import xml.etree.ElementTree as ET

context = ET.iterparse('filname.xml', events=('end', ))
for event, elem in context:
if elem.tag == 'row':
    title = elem.find('NAME').text
    filename = format(title + ".xml")
    with open(filename, 'wb') as f:
        f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
        f.write("<root>\n")
        f.write(ET.tostring(elem))
        f.write("</root>")

有一个很好的工具http://xmlstar.sourceforge.net/docs.php可以用xml做很多事情(但它不是pythonic)。

鉴于您有一个带有上述数据的1.xml文件。 您需要将其拆分为具有名称NNN.xml和元素/根/行的单独文件。

只需调用shell:

    $ for ((i=1; i<=`xmlstarlet sel -t -v 'count(/root/row)'  1.xml`; i++)); do \
          echo '<?xml version="1.0" encoding="UTF-8"?><root>' > NAME.xml;
          NAME=$(xmlstarlet sel -t -m '/root/row[position()='$i']' -v './NAME' 1.xml); \
          xmlstarlet sel -t -m '/root/row[position()='$i']' -c . -n 1.xml >> $NAME.xml; \
          echo '</root>' >> NAME.xml
       done

现在你有一堆像Joe.xml这样的xml文件

2 将 XML 文件拆分为多个给定标签,例如:使用 python 的标签

嗨,我有一个大的 xml 文件,在这里我想根据 id 将该 xml 文件拆分为多个文件(此处 id 是唯一的)。 现在我有一个带有 3 个唯一标签 ID 的 xml 文件,我想拆分它们。 我的文件如下 主文件 我需要一个带有页眉和页脚的单个文件中的每个“id”数据(您可以观察以下文件),上面是 ...

5 使用python根据标签将XML文件拆分为多个文件

我有一个很大的xml文件,其中包含图像批注的详细信息。 相同的示例如下: 我希望根据其标签名称来拆分此文件。 该文件有两个标签,即ScoreBoard和Perimeter。 我想为每个标签创建两个不同的xml。 所需的输出如下: 适用于ScoreBoard-Vivon.xm ...

7 根据标签将单个XML拆分为多个XML

我想基于一个标记将一个XML分成两个单独的XML。 假设我有一个源xml: 我想根据PRLINE标签将此xml分为两部分。 因此输出应为: 来源1: 来源2: 任何人都可以帮助我实现这一目标。 我正在使用XSLT 1.0。 非常感谢Nitika ...

2013-04-01 08:08:11 0 741   xslt
8 从给定标签读取 xml 文件熊猫

我的xml数据如下, 我希望输出数据帧为 英语 马拉地语 prompt_username वापरकर्त्याचेनाव 物品 आगमन चेतावणी ...

9 将XML文件拆分为多个

之前可能已经有人问过这个问题,但是我有一个XML文件,需要将其拆分为单个文件。 该文件是: 我有我的代码将其拆分为: 但是,这并不能解决问题。 我希望每个文件看起来像 任何帮助将不胜感激。 ...

10 将 XML 拆分为多个文件

我想将 XML 拆分为多个 XML 文件。 我正在尝试这个脚本,但是,我不断收到以下错误: 有谁知道如何解决这个问题? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM