如果不满足测试条件,则避免XML声明

时间:2017-06-21 16:35:45

标签: xml xslt filter

如果不满足条件,我正在进行转换。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xpath-default-namespace="urn:oasis:names:tc:xliff:document:1.1"
    version="2.0">

    <!-- this captures the folder parameter given in the call -->  
    <xsl:param name="dir" select="dir" />

    <!-- this template iterates through the files in the input folder except for en-GB --> 
    <xsl:template name="main">
        <xsl:if test="not(contains($dir, 'en-GB'))">
            <xsl:variable name="input-files" select="concat($dir, '?select=*.xlf')" />
            <xsl:apply-templates select="collection($input-files)"/>
        </xsl:if>
    </xsl:template>

    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
    <xsl:strip-space elements="*"/> 

我在命令行中使用以下调用运行样式表:

$> java -jar saxon9.jar -it:main -xsl:this_stylesheet.xsl dir="path/to/xx-XX"

条件检查文件夹是否不是en-GB。如果文件夹不是en-GB,则迭代xx-XX。如果文件夹是en-GB,则迭代将忽略该文件夹并移动到集合中的下一个文件夹。

问题是当满足该条件时(例如“path / to / en-GB”),虽然没有输出文件,但命令行上有一些输出,即结果文件的XML声明不会生成:

<?xml version="1.0" encoding="UTF-8"?>

我正在寻找一种避免这种局部输出的方法,例如:使它也以测试为条件,因此如果测试不成功则不输出任何内容。

2 个答案:

答案 0 :(得分:1)

我认为你可以简单地使用例如<xsl:output method="text"/>用于主要转化结果,并为您的文档添加<xsl:output name="docs" method="xml" version="1.0" encoding="UTF-8" indent="yes" />,然后使用例如您未显示的代码部分中的<xsl:result-document format="docs" ...></xsl:result-document>

答案 1 :(得分:1)

另一种选择是使用<xsl:output method="xml" omit-xml-declaration="yes"/>,然后有条件地将声明添加为文本。

请参阅此其他帖子以获取代码示例: