2017-01-27 27 views
0

我想将下面的结构中的xml文件转换为与此非常相似的另一个文件,假设每个元素名称都发生了变化(即A..F-> ANew..FNew)。我想用XSLT 3.0使用Saxon-EE v9.7引入的流式传输模式来实现,因为我需要处理非常大的文件。尽管我可以部分地接受它(Root/Head部分),但由于我无法满足Saxon-EE适用的流播规则并且我迷失在其中,所以我无法提出完全解决整个文档的解决方案......我很欣赏任何xslt建议这将在Saxon-EE v9.7的流媒体模式下工作。如何创建流式XSLT转换?

<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> 
+0

我明白,要使流式转换工作起来可能非常棘手。但是,在SO格式下进行的最好方式是让您向我们展示一种以明确和可重现的方式失败的尝试,然后我们可以帮助您克服该特定障碍。另请注意,如果您购买了Saxon-EE许可证,那么您有直接支持Saxonica的途径:我们不介意使用StackOverflow,但如果您使用Saxonica自己的支持渠道,那么我们将努力追踪解决问题的方案。 –

回答

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给您的准确错误消息。