如果给定元素具有给定的“魔术值”,则插入新的XML元素?

时间:2016-07-22 10:22:49

标签: xml xslt xsd

我们正在处理一个遗留系统,其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>但是这不是必需的,我们可以将此属性设置为可选,只会让事情变得更加混乱。

1 个答案:

答案 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>