当初始标记不存在时,XSLT转换失败

时间:2017-11-02 07:33:26

标签: xslt xslt-1.0 xslt-2.0

输入XML

<web-inf>
<servlet>
    <servlet-name>S1</servlet-name>
    <servlet-class>XXXX</servlet-class>
</servlet>

<servlet>
    <servlet-name>S2</servlet-name>
    <servlet-class>YYYY</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>S1</servlet-name>
    <url-pattern>*.xsp</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>S2</servlet-name>
    <url-pattern>*.xsp</url-pattern>
</servlet-mapping>
</web-inf>

我想在<zoom><boom>WHAT</boom></zoom>下添加以下<web-inf>,即使标签<zoom>已经不存在。如果<zoom>标记存在且<boom>标记为值,那么我不想做任何事情。我正在使用以下转换,但当<zoom>标记根本不存在时它无效。有什么建议吗?

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="web-inf[not (zoom/boom='WHAT')]/zoom[last()]">
        <xsl:copy-of select="."/>
        <zoom><boom>WHAT</boom></zoom>
</xsl:template>

1 个答案:

答案 0 :(得分:1)

尝试按以下方式更改模板

<xsl:template match="web-inf[not(zoom/boom='WHAT')]">
    <xsl:copy>
        <zoom>
            <boom>WHAT</boom>
        </zoom>
        <xsl:apply-templates />
    </xsl:copy>
</xsl:template>