繁体   English   中英

XSLT问题:仅在不存在XML的情况下才添加标签?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM