XSLT身份转换

时间:2011-11-02 17:57:32

标签: xml xslt

我正在测试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 个答案:

答案 0 :(得分:4)

w3schools工具在测试XML到HTML转换时很有用,因为它试图在浏览器中将转换结果呈现为HTML。使用您的身份转换,您不会创建任何HTML,而是创建XML。只有转换结果中的“title”元素才会将浏览器视为已知但错误放置的HTML元素,因此它不会在页面中显示它。所有其他元素都是未知的,因此会呈现其文本内容。

基本上让自己成为一个独立的XSLT处理器或XML编辑器,w3schools工具对调试和测试除XML到HTML转换之外的任何东西都没用。

答案 1 :(得分:1)

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

更新:也可以使用saxon-xlst ...

问题应该在于W3C学校的实施......

在Martin的回答后更新:呃......没问题,但只有xml转换为html ...我暂停一天的时间? ;)

答案 2 :(得分:1)

我无法重现您的结果,但可能与浏览器有关。您忽略的是页面将转换的结果呈现为HTML,而在您的情况下则不是。对于使用非HTML标签的XML,浏览器究竟做了什么可能是不可预测的。

答案 3 :(得分:0)

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

<xsl:copy>

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

<xsl:copy-of>

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