复制XML文件内容并在单独的文件中写入XSLT处理日志输出

时间:2017-06-19 12:43:10

标签: xml xslt stylesheet

我有一个XSL转换,我在其中更正属性的拼写。这很好用。但是当我跳过校正(因为已经存在更正的属性)时,我想将其记录在一个单独的文件中。

这两个任务分开工作,但是当我尝试将它们组合在一起时,只写了日志文件,但我想要两个输出 - 生成的XML和日志文件。如何解决?

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/> 
<xsl:variable name="processingFileName" select="base-uri()" />


<!------- This corrects the spelling in the XML ---------->
<xsl:template match="node()|@*" >       
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"  />
    </xsl:copy>
</xsl:template>

<xsl:template match="Attribute[@Name = 'Clor']" >
    <xsl:if test="not(../Attribute[@Name = 'Color'])">
        <Attribute Name="Color" Value="{@Value}" />
    </xsl:if>       
</xsl:template>


<!------- This logs skipped parts in a log file ---------->
<xsl:template match="/" >
    <xsl:result-document method="text" href="{$processingFileName}.log">
        <xsl:apply-templates mode="logging" select="/export/parts/part/Attribute" />
    </xsl:result-document>      
</xsl:template>

<xsl:template match="Attribute[@Name = 'Clor']" mode="logging">         
    <xsl:if test="(../Attribute[@Name = 'Color'])">
        <xsl:value-of select="../@PartNo" />
        <xsl:text>&#13;&#10;</xsl:text>
    </xsl:if>       
</xsl:template>     

1 个答案:

答案 0 :(得分:1)

通过更改

确保您的文档后代也使用默认模式
<xsl:template match="/" >
    <xsl:result-document method="text" href="{$processingFileName}.log">
        <xsl:apply-templates mode="logging" select="/export/parts/part/Attribute" />
    </xsl:result-document>      
</xsl:template>

<xsl:template match="/" >
    <xsl:apply-templates/>
    <xsl:result-document method="text" href="{$processingFileName}.log">
        <xsl:apply-templates mode="logging" select="/export/parts/part/Attribute" />
    </xsl:result-document>      
</xsl:template>