大家好,我有高度重复的数据,深度为 5 个节点(包括根),需要拆分。(我将在一分钟内包含一个快速示例。)我想要做的是基于 3rd-depth 节点将一个 ~5mb XML 文件解析为更小的子文件。但在那之后,它变得更加复杂。
该任务的要求如下:
- 子文件必须维护被提取的第 3 级节点的分层父级,包括它们的属性。
- 子文件必须保留所有属性和子节点。
- 如果 XSLT 无法处理该作业,请在 Ruby 中尝试。如果您不擅长 XSLT,但可以告诉我如何在 Ruby 甚至 Python 中做到这一点,请随时用这些语言提供答案。(否则尝试坚持使用 XSLT 或伪代码。)
DOM 层次结构:
<xml attr="whatever">
<major-group name="whatever">
<minor-group name="whatever">
<another-group name="whatever">
<last-node name="whatever"></last-node>
</another-group>
</minor-group>
</major-group>
</xml>
我需要将其拆分为次要组元素,同时保留其孩子和直接父母,并将所有这些(对于每个次要组)放在一个外部文件中。我有几个文件要以这种方式拆分。
而且...以前从未在 Ruby 中解析过 XML,并且刚刚开始使用 XSLT,我还不能编写脚本来完成我的任务。
我很想知道 XSLT 是否能胜任这项任务。 :>
编辑:
这是我生成的代码,能够在文件开头显示样式表。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml"/>
<xsl:template match="minor-group">
<xsl:variable name="filename"><xsl:value-of select="concat(@name,'.xml')"/></xsl:variable>
<xsl:result-document href="{$filename}">
<xsl:text disable-output-escaping="yes">
<![CDATA[<?xml-stylesheet type="text/xsl" href="../web.xslt"?>]]>
</xsl:text>
<xml>
<xsl:attribute name="whatever"><xsl:value-of select="../../@whatever" /></xsl:attribute>
<major-group>
<xsl:attribute name="whatever"><xsl:value-of select="../@whatever" /></xsl:attribute>
<xsl:copy-of select="."/>
</major-group>
</xml>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>