我正在测试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转换,但我想确保我知道任何问题......
答案 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>
自动复制命名空间节点,子节点和当前节点的属性!