XSLT身份转换

3

我正在测试XSLT身份转换,所以我随机选择了www.w3schools.com上的以下示例,因为它允许我在线尝试:

http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog_apply

我把右侧面板里的XSLT改成了身份转换:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>  
    </xsl:template>

</xsl:stylesheet>

我尝试了一下,发现/catalog/cd/title节点没有被复制到输出中(但其他所有内容都被复制了)。如果我将名称从/catalog/cd/title更改为/catalog/cd/title1(或任何其他名称),它会复制该节点。因此,我想知道在www.w3schools.com上的XSLT实现是否存在错误,或者XML节点“title”有什么特殊含义,导致其无法被复制?我计划按照上述描述使用XSLT转换,但我想确保我知道任何问题...
4个回答

5
那个w3schools工具对于测试XML到HTML转换非常有用,因为它会尝试在浏览器中以HTML形式呈现转换结果。使用标识转换时,您不会创建任何HTML,而是创建XML。只有转换结果中的“title”元素在浏览器中被视为已知但放置错误的HTML元素,因此它不会在页面中显示。所有其他元素都是未知的,因此它们的文本内容被呈现出来。

基本上,您需要获取一个独立的XSLT处理器或XML编辑器,那个w3schools工具不能用于调试和测试除XML到HTML转换之外的任何内容。


1

在Debian上使用xsltproc可以正常工作。

更新:使用saxon-xlst也可以正常工作...

问题应该出在W3C School的实现上...

Martin回答后更新:嗯...没有问题,只是xml到html的转换...是我今天停下来的时候了吗? ;)


你也可以使用saxon-xslt(取决于目标)。这些是我在XSLT2中最喜欢的与saxonb一起使用的工具。 - Renaud

1

我无法重现您的结果,但可能与浏览器有关。您忽略的是,该页面将转换结果呈现为HTML,而在您的情况下它不是。对于使用非HTML标记的XML,浏览器的处理方式很可能是不可预测的。


0

我知道这是一篇旧帖子,但我在这里没有看到正确的答案。

<xsl:copy>

当前节点的命名空间节点也会自动复制,但是当前节点的子节点和属性不会自动复制!

<xsl:copy-of>

命名空间节点、子节点和当前节点的属性也会自动复制!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接