Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT标识转换_Xml_Xslt - Fatal编程技术网

Xml XSLT标识转换

Xml XSLT标识转换,xml,xslt,Xml,Xslt,我正在测试XSLT标识转换,因此我在www.w3schools.com上随机选择了以下示例,因为它允许我在线尝试: 我将右窗格中的XSLT更改为identity transform: <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Edited by XMLSpy® --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Tra

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

我将右窗格中的XSLT更改为identity transform:

<?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实现中是否存在一个bug,或者XML节点“title”是否有某种特殊意义导致它无法被复制?我正计划如上所述使用XSLT转换,但我想确保我知道任何问题…

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

更新:也可以使用saxon xlst

问题应该出在W3C学校的实施上


在Martin的回答后更新:嗯……没问题,只是xml到html的转换……我该停下来休息一天了?;)

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


基本上,您需要一个独立的XSLT处理器或XML编辑器,该工具对于调试和测试XML到HTML转换以外的任何东西都没有用处。

我无法重现您的结果,但它可能依赖于浏览器。您所忽略的是,页面将转换的结果呈现为HTML,而在您的情况下则不是。浏览器如何处理使用非HTML标记的XML可能是不可预测的。

我知道这是一篇老文章,但我在这里没有看到正确的答案

<xsl:copy>

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

<xsl:copy-of>

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

您也可以使用saxon xslt(取决于目标)。这些是我对saxonb for XSLT2的最爱。