我有一个xml文档,需要用包含节点和处理指令的部分xml段替换特定节点。我想保留PI,但遇到更换问题。XSLT使用处理指令将部分XML段导入XML
段例如:general.xml
<root>
<!--General Settings -->
<?mapping EnvironmentSetting="envname"?>
<setting name="SubscriptionName" value="*" />
</root>
源XML:
<environment>
<General />
</environment>
变换 -
<xsl:template match="* | processing-instruction() | comment()">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*/General">
<xsl:copy-of select="document('general.xml')/root"/>
</xsl:template>
的输出是:
<environment>
<root>
<!--General Settings -->
<?mapping EnvironmentSetting="envname"?>
<setting name="SubscriptionName" value="*" />
</root>
</environment>
但我想:
<environment>
<!--General Settings -->
<?mapping EnvironmentSetting="envname"?>
<setting name="SubscriptionName" value="*" />
</environment>
更改文档部分到根/ *下降处理的指令(和注释)
<xsl:copy-of select="document('general.xml')/root/*"/>
...
<environment>
<setting name="SubscriptionName" value="*" />
</environment>
更改文档部分到根/过程的指令丢弃节点
<xsl:copy-of select="document('general.xml')/root/processing-instruction()"/>
...
<environment>
<?mapping EnvironmentSetting="envname"?>
</environment>
正在尝试做|只是比赛的第一个参数 -
<xsl:copy-of select="document('general.xml')/root/processing-instruction() | * | comment()"/>
...
<environment>
<?mapping EnvironmentSetting="envname"?>
</environment>
那么,如何让我的鱼与熊掌兼得呢?我看起来如此接近,但在找到我想做的事情的例子时遇到问题。
修改后的身份模板是相当奇怪的。从实际的身份模板开始,为不希望复制的节点类型添加空模板会更有用。 '的 –
Tomalak
不知道我理解你的意见,你的你指的身份模板,该模板部分我是相当新的XSLT? ,所以请原谅我的无知,如果这似乎是我问一个愚蠢的问题。 – James
我指的是第一个''你的问题。恒等变换(又名身份模板)是XSLT真正的基本功能之一,你会仅靠这些关键字找到吨的阅读材料。 –
Tomalak