我们正在处理一个遗留系统,其XML输出没有根据模式定义而不是最优,所以我们实际上定义了我们自己的,更好的模式,并将XSL转换应用于接收的XML以使其匹配。
收到的XML中的一个特例是“哦,如果这个字段有一个特殊的'魔术值',那就意味着与正常情况不同。所以我们想添加一个规则。例如:给定:
<SomeObject>
<Id>123</123>
<UpdateCount>-1</UpdateCount>
</SomeObject>
输出:
<SomeObject>
<Id>123</123>
<UpdateCount xsi:nil='true'/> //we don't HAVE to have this but it's preferred
<Deleted>true</Deleted>
</SomeObject>
理想情况下,对于UpdateCount
的所有其他值,我们会添加<Deleted>false</Deleted>
但是这不是必需的,我们可以将此属性设置为可选,只会让事情变得更加混乱。
答案 0 :(得分:1)
你可以这样做:
<xsl:template match="UpdateCount[. = -1]">
<UpdateCount xsi:nil="true"/>
<Deleted>true</Deleted>
</xsl:template>
或者:
<xsl:template match="UpdateCount">
<xsl:choose>
<xsl:when test=". = -1">
<UpdateCount xsi:nil="true"/>
<Deleted>true</Deleted>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
<Deleted>false</Deleted>
</xsl:otherwise>
</xsl:choose>
</xsl:template>