如何创建可流式XSLT转换?

时间:2017-01-27 09:33:49

标签: xml xslt streaming transformation saxon

我想将下面结构中的xml文件转换为另一个非常相似的文件,假设每个元素名称都有变化(即A..F - > ANew..FNew)。我想用XSLT 3.0使用Saxon-EE v9.7引入的流式传输模式,因为我需要处理非常大的文件。虽然我可以部分取得成功(Root / Head部分),但我无法提出完全解决整个文档的解决方案,因为我无法满足Saxon-EE适用的流量规则,我在其中迷失了...我感谢任何xslt建议这将使用Saxon-EE v9.7在流模式下工作。

 <Root>
  <Head>
    <A/>
    <B/>
  </Head>
  <Grp>
     <D/>
     <E/>
     <SubGrp>
        <E/>
        <F/>
     </SubGrp>
     <SubGrp>
        <E/>
        <F/>
     </SubGrp>
  </Grp>
  <Grp>
     <D/>
     <E/>
     <SubGrp>
        <E/>
        <F/>
     </SubGrp>
     <SubGrp>
        <E/>
        <F/>
     </SubGrp>
  </Grp>
 </Root>

1 个答案:

答案 0 :(得分:0)

如果您使用

<xsl:mode streamable="yes" on-no-match="shallow-copy"/>

作为起点,如果您只需要重命名某些元素,则可以添加模板,例如。

<xsl:template match="A">
  <ANew>
    <xsl:apply-templates/>
  </ANew>
</xsl:template>

<xsl:template match="F">
  <FNew>
    <xsl:apply-templates/>
  </FNew>
</xsl:template>

如果您仍有问题,请向我们展示您的XSLT以及Saxon为您提供的确切错误消息。