如何使用xslt插入/替换元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用xslt插入/替换元素相关的知识,希望对你有一定的参考价值。
我有以下xml
文件
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:t="http://www.tibco.com/xmlns/ApplicationManagement"
name="test">
<content>
<on> false </on>
</content>
</application>
我想让我的xsl
修改xml
,以便:
如果标签存在同名,则覆盖该值。
如果不存在具有相同值的标记,则将其插入。
这是我的xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:t="http://www.tibco.com/xmlns/ApplicationManagement"
xmlns="http://www.w3.org/1999/xhtml" version="1.0">
<xsl:output encoding="UTF-8" indent="yes" method="xml"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="content">
<xsl:copy>
<xsl:apply-templates/>
<xsl:if test="not(status)">
<status>new status </status>
</xsl:if>
<xsl:if test="on">
<on>new on value</on>
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我遇到<on>new on value</on>
的问题,因为解决方案应该取代on
标签值,而是创建一个全新的
结果如下(没有顶部的xml和应用程序标记):
<content>
<on> false </on>
<value> light </value>
<status xmlns="http://www.w3.org/1999/xhtml">new status
</status>
<on xmlns="http://www.w3.org/1999/xhtml">new on value
</on>
</content>
如何在同一模板中替换on标签?
答案
您可以使用模板匹配来匹配<on>
元素和<status>
元素(不是示例的一部分)。
<xsl:template match="content"> <!-- remove <xsl:if...> from this template -->
<xsl:copy>
<xsl:apply-templates />
<xsl:if test="not(status)"> <!-- if <status> element does not exist, create one -->
<status>added new status </status>
</xsl:if>
<xsl:if test="not(on)"> <!-- if <on> element does not exist, create one -->
<on>added new on value</on>
</xsl:if>
</xsl:copy>
</xsl:template>
<xsl:template match="on[parent::content]"> <!-- replaces <on> elements with parent <content> -->
<on>new on value</on>
</xsl:template>
<xsl:template match="status[parent::content]"> <!-- replaces <status> elements with parent <content> -->
<status>new status </status>
</xsl:template>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:t="http://www.tibco.com/xmlns/ApplicationManagement" name="test">
<content>
<on xmlns="http://www.w3.org/1999/xhtml">new on value</on>
<status xmlns="http://www.w3.org/1999/xhtml">added new status </status>
</content>
</application>
以上是关于如何使用xslt插入/替换元素的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 XSLT 替换 XML 节点名称中的字符 - 更改根元素
如何使用 XSLT v1.0 而不是使用 XSLT v2.0 正则表达式插入文本?