gpt4 book ai didi

python - 瘦身一个xml

转载 作者:数据小太阳 更新时间:2023-10-29 02:16:33 26 4
gpt4 key购买 nike

我有一个程序每天生成一个大的 xml,我想节省空间,有些信息在一段时间后没有用。我想删除这些信息,例如我的 xml 现在是:

<owner name="thename">
<datasets ndatasets="10" size="10000">
<dataset size="100" creationdate="...">mydataset1</dataset>
<dataset size="200" creationdate="...">mydataset2</dataset>
...
</datasets>
</owner>
<owner name="thename2">
...
</owner>

我想删除单个数据集上的信息,所以我想将其转换为:

<owner name="thename">
<datasets ndatasets="10" size="10000" />
</owner>
<owner name="thename2">
...
</owner>

最简单的方法是什么?我正在使用 python,但也欢迎使用其他简单且可移植的解决方案

最佳答案

XSLT 解决方案(Sean 的解决方案很好,但如果 dataset 以外的元素或节点成为 datasets 的子元素,它将停止工作):

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="datasets/node()"/>
</xsl:stylesheet>

当此转换应用于提供的骨架 XML 时(包装到单个顶部元素中以使其成为格式良好的 XML 文档):

<t>
<owner name="thename">
<datasets ndatasets="10" size="10000">
<dataset size="100" creationdate="...">mydataset1</dataset>
<dataset size="200" creationdate="...">mydataset2</dataset>
</datasets>
</owner>
<owner name="thename2">
<datasets ndatasets="10" size="10000">
<dataset size="100" creationdate="...">mydataset1</dataset>
<dataset size="200" creationdate="...">mydataset2</dataset>
</datasets>
</owner>
</t>

产生了想要的、正确的结果:

<t>
<owner name="thename">
<datasets ndatasets="10" size="10000"/>
</owner>
<owner name="thename2">
<datasets ndatasets="10" size="10000"/>
</owner>
</t>

解释:

正确使用身份规则并使用与 datasets 的任何子节点匹配的空体模板覆盖它。

关于python - 瘦身一个xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11096181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com