初始标记不存在时XSLT转换失败
输入XML初始标记不存在时XSLT转换失败,xslt,xslt-1.0,xslt-2.0,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&
<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>
我想添加以下内容,即使标签不存在。如果标签以标签作为值存在,那么我不想做任何事情。我正在使用下面的转换,但当标签根本不存在时,它就不起作用了。有什么建议吗
<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>
尝试如下更改模板
<xsl:template match="web-inf[not(zoom/boom='WHAT')]">
<xsl:copy>
<zoom>
<boom>WHAT</boom>
</zoom>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
这将去掉web inf标记,并在末尾添加新标记。不完全是我想做的。我想在刚开始时添加新标记。您需要保留标识模板并添加此更新模板以添加所需元素。它将在最后添加。不能在开始时添加到标签下面吗?是的。我已经修改了解决方案。已将移动到元素之后。现在应该在元素下面添加。谢谢。这正是我想要的。