我正在使用XSLT转换ivy.xml文件,我基本上想要更新特定rev
标记的dependency
属性。我的问题在于conf
属性,我希望它保持完全相同,不幸的是>
转换为>
。我的常春藤文件看起来像这样:
<ivy-module version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="foo" module="libfoo" revision="1.0.1"/>
<configurations>
</configurations>
<publications>
<artifact name="libfoo" type="jar" conf="default" />
</publications>
<dependencies>
<dependency org="easymock" name="easymock" rev="2.5.2" conf="test->default,class-extension"/>
</dependencies>
</ivy-module>
我的XSL看起来像这样:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output />
<xsl:param name="dependency.rev" />
<xsl:param name="dependency.org" />
<xsl:param name="dependency.name" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="dependency">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
<xsl:choose>
<xsl:when test="@name=$dependency.name">
<xsl:attribute name="rev">
<xsl:value-of select="$dependency.rev" />
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我的输出如下:
<dependency org="easymock" name="easymock" rev="2.5.2" conf="test->default,class-extension"/>
我已尝试在conf属性的显式设置上设置disable-output-escaping="no"
,但这不起作用
<xsl:attribute name="conf">
<xsl:value-of select="@conf" disable-output-escaping="yes" />
</xsl:attribute>
答案 0 :(得分:4)
我的问题是conf属性, 我希望它保持完全相同, 不幸的是
>
被转换为>
。
你做不到。根据{{3}} :
“对于用于结果树中除文本节点之外的其他内容的文本节点,禁用输出转义是错误的。因此,禁用xsl的输出转义是错误的: value-of或xsl:text元素,用于生成注释,处理指令或属性节点的字符串值“
包含conf
的{{1}}属性中没有任何问题。
事实上,两者都是
test->
和
conf="test->default,class-extension"
具有完全相同的字符串值。
要验证这一点,只需应用以下简单转换:
conf="test->default,class-extension"
到“糟糕”的结果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
"<xsl:value-of select="@conf"/>"
</xsl:template>
</xsl:stylesheet>
,你得到的是:
<dependency org="easymock"
name="easymock"
rev="2.5.2"
conf="test->default,class-extension"
/>
这与编码 "test->default,class-extension"
而非 
完全相同 - 这些字符完全相同,但以不同方式指定。