XSLT在我的文件末尾转储垃圾

时间:2010-07-07 23:06:18

标签: xml xslt

我正在使用XSLT来处理XML文件中的数据(我正在使用一个XML文件并将它们放入另一个XML文件中的新shell中)。我只使用第一个文件中的一些数据,来自我不使用的部分的数据被连接到新文件的末尾。如何让XSLT不要这样做?

谢谢!

编辑:这是一些伪代码,我无法发布实际代码:

<xsl:output method="xml"/>
<xsl:template match="foo">
    <xsl:element name="bar">
        <!--... makes elements and traverses some of the other file ...-->
    </xsl:element>
</xsl:template>

输出:

    <foo>
        <bar>
            <!-- ... -->
        </bar>
    </foo>

    <!-- junk at the end of the file that matches up with the content of the unused data tags -->

    0

    N
    N
    Y
    00000148
    ASDF

3 个答案:

答案 0 :(得分:4)

XSLT包含某些default templates,当您不写一个来覆盖它时,会调用这些{{3}}。例如,如果您不包含与根元素匹配的模板,则会执行以下操作:

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

还有一个默认模板将发出匹配元素的文本内容。这可能是你在输出中看到的“垃圾”。

我的猜测是你需要通过包含根模板并明确匹配那些你感兴趣的元素来阻止这种情况。

答案 1 :(得分:3)

XSLT具有默认的根匹配模式。要替换它,请在XSLT中尝试这样的事情:

<xsl:template match="/">
  <xsl:apply-templates select="foo"/>
</xsl:template>    
<xsl:template match="foo">
    <xsl:element name="bar">
        <!--... makes elements and traverses some of the other file ...-->
    </xsl:element>
</xsl:template>

答案 2 :(得分:0)

只有完成 - 如果你不想要,你不需要匹配根元素。防止使用内置默认模板的另一种方法是定义一个空模板,收集XSLT文件末尾的所有其余模板,如下所示

<xsl:template match="*" />