[英]XSLT Qn : How to add a tag in XML only if it is not present?
xlst世界的新手,试图在xml文件中进行简单的更新。
我想在我的XML文件中添加两个不同的标签<NODE1 name="name1" value="value1"/>
和<NODE2 name="name2" value="value2"/>
,只要它们在MAIN_NODE
中不存在分别。
例如,如果MAIN_NODE内部不存在NODE1,则应在其中插入NODE1。 如果不存在NODE2,则应添加NODE2。 如果两者都不存在,则应同时添加两者,反之亦然。
我尝试下面的代码:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="MAIN_NODE">
<xsl:copy>
<xsl:apply-templates/>
<xsl:text>
</xsl:text>
<NODE1 name="name1" value="value1"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
它正在工作,但是当我随后运行XSLT时,会重复添加NODE1。 我怎样才能在该代码中放入条件? 然后对Node2重复同样的事情,以便两者可以通过一个XSLT一起工作。
谢谢。
它像这样工作-
<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="MAIN_NODE">
<xsl:copy>
<xsl:apply-templates/>
<xsl:if test="not(./NODE1)">
<NODE1 name="name1" value="value1"/>
</xsl:if>
<xsl:if test="not(./NODE2)">
<NODE2>Node2_string</NODE2>
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
谢谢,拉吉夫
改变<xsl:template match="MAIN_NODE">
到<xsl:template match="MAIN_NODE[not(NODE1)]">
仅使用模板MAIN_NODE
不具有元素NODE1
子元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.