我想知道如何在遵守某些条件的情况下使用XSLT将节点向上移动一个级别。举个例子,看看下面的XML源代码:XSLT:将节点向上移动
<Settings>
<String [...]>
<Boolean [...]/>
</String>
</Settings>
这就是我作为起始情况的XML。清楚的是,节点名称“Settings”,“String”,“Boolean”是我们定义的特殊节点。
问题是“布尔”节点不允许在“字符串”节点内部。这就是为什么我必须将这些“布尔”节点升级。所需的XML是这样的:
<Settings>
<String [...]></String>
<Boolean [...]/>
</Settings>
的XSLT还拥有具有同级布尔节点,无论在XML树中的位置的每个字符串节点的工作。
到目前为止,我了解到,你必须首先使用“身份规则”拷贝所有的XML,然后运用一些特殊的规则所期望的转变:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<!-- Identity rule -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!-- special rules ... -->
</xsl:stylesheet>
我挣扎的东西是规则将所有“布尔”节点(它们是“字符串”节点的同级节点)向上移动一级。我怎样才能做到这一点?!?
好问题,+1。查看我的答案,了解“覆盖身份规则”设计模式的变体 - 我提供了更准确的覆盖。 :) – 2011-01-24 14:17:50