【发布时间】:2013-04-15 18:24:37
【问题描述】:
使用 xsl 做一些工作 - 我第一次做任何严肃的事情,我遇到了一些我无法解释的事情。显示它的最简单方法是使用恒等变换:
这行得通:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
这不是(说“无法在当前源上应用转换”):
<xsl:template match="@*|node()" xml:space='preserve'>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
这样做:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="node()" xml:space='preserve'/>
</xsl:copy>
</xsl:template>
好的,我可以看到发生了什么。但我不明白为什么。为什么 xml:space 不想很好地处理属性?只是好奇。
顺便说一句,这是使用 Notepad++ 中内置的 xsl 翻译器。也许我不应该相信它?
【问题讨论】:
-
前两个看起来相同。有什么区别?
-
完全正确!手指麻烦,对不起。现已修复。
-
好的,我看到了你的修复......但看起来你的问题仍然很困惑。对于将
xml:space应用于属性(#3)的示例,您说“这确实”有效。但是您说“xml:space”不想很好地使用属性。也许你给你的例子贴错了标签? -
另外,什么是“当前来源”?如果您在 Notepad++ 中使用缓冲区(或文件),该文件是否可能不是格式正确的 XML?
-
对不起,也弄错了!太多的测试文件散开!无论如何都不希望这样做,因为属性在节点之前。现在修复... 格式不正确:这是一个公平的问题。我认为来源格式正确(检查过,它在第一种和第三种情况下运行良好)。我可以在评论中发布它吗?
标签: xslt attributes