我是xslt的新手。 我需要将spring bean添加到xml中,以防它还不存在。 所以我尝试了下一个代码(我使用ant运行此代码):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
<xsl:if test="not(bean[@class='com.mysite.MyCustomController'])">
<bean class="com.mysite.MyCustomController"/>
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
它可以工作,但添加了带有xmlns属性的元素,所以它在最终的XML文件中看起来像这样:
<bean xmlns="" class="com.mysite.MyCustomController"/>
我希望结果没有xmlns属性,所以我搜索了我的xsl代码转到:
...
<xsl:if test="not(bean[@class='com.mysite.MyCustomController'])">
<bean class="com.mysite.MyCustomController" xmlns="http://www.springframework.org/schema/beans"/>
</xsl:if>
...
现在结果XML看起来很好:
<bean class="com.mysite.MyCustomController"/>
但! IF条件不起作用。每次运行代码时都会添加相同的bean。
我的xsl错了吗? 感谢。
答案 0 :(得分:1)
您的XML包含命名空间http://www.springframework.org/schema/beans
中的元素。您检查并将元素添加到默认命名空间(“”)。为了使事情有效,您需要修改代码
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:bn="http://www.springframework.org/schema/beans"
exclude-result-prefixes="bn">
..........
<xsl:if test="not(bn:bean[@class='com.mysite.MyCustomController'])">
<bean class="com.mysite.MyCustomController"
xmlns="http://www.springframework.org/schema/beans"/>
</xsl:if>
.............
</xsl:stylesheet>
答案 1 :(得分:0)
正确的代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:bn="http://www.springframework.org/schema/beans">
<xsl:output method="xml" indent="yes" encoding="UTF-8" />
<xsl:attribute-set name="bean-attr-list">
<xsl:attribute name="class">com.mysite.MyCustomController</xsl:attribute>
</xsl:attribute-set>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
<xsl:if test="not(bn:bean[@class='com.mysite.MyCustomController'])">
<xsl:element name="bean" namespace="http://www.springframework.org/schema/beans" use-attribute-sets="bean-attr-list" />
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>