XSLT:当只有外部XSL标记时,XSLT不生成输出的原因

时间:2014-02-04 18:55:06

标签: xslt

我的真实代码不是这个,但我在这里陈述的问题适用于我的真实代码。

XML:

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book.child.1>
        <title>charithram</title>
        <author>sarika</author>
    </book.child.1>
    <book.child.2>
        <title>doublebell</title>
        <author>psudarsanan</author>
    </book.child.2>
</books>

XSLT 1:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8"
        indent="yes" />
    <xsl:template match="/">
        <xsl:for-each select="books/*">
            <newbook>
                <title>
                    <xsl:value-of select="title" />
                </title>
            </newbook>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

没有为此XSLT生成输出。我正在尝试使用在线工具:http://www.freeformatter.com/xsl-transformer.html

我无法理解什么是错的,最后当我修改XSLT时,如下所示,

XSLT 2:

 <?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8"
        indent="yes" />
    <xsl:template match="/">
        <mytag>
            <xsl:for-each select="books/*">
                <newbook>
                    <title>
                        <xsl:value-of select="title" />
                    </title>
                </newbook>
            </xsl:for-each>
        </mytag>
    </xsl:template>
</xsl:stylesheet>

在这种情况下生成输出

outputXML:

<?xml version="1.0" encoding="UTF-8"?>
<mytag>
    <newbook>
        <title>charithram</title>
    </newbook>
    <newbook>
        <title>doublebell</title>
    </newbook>
</mytag>

你能解释一下这个行为的原因吗?

此外,我不知道如何提出这个问题,所以如果我需要更改问题标题,请编辑或告诉我。

1 个答案:

答案 0 :(得分:2)

您的第一个XSLT理论上会产生输出

<?xml version="1.0" encoding="UTF-8"?>
<newbook>
    <title>charithram</title>
</newbook>
<newbook>
    <title>doublebell</title>
</newbook>

但是那个输出不是有效的XML,因为它有2个根标签,它不是格式良好的XML。

在这种情况下,您可能有以下选择

  • 像在XSLT 2中一样指定根元素

  • 将输出从XML更改为TEXT,但请注意,任何XML程序都无法读取输出