我需要转换一个XML块,以便如果一个节点(在本例中为“User / ShopId”)为空,它应该回退到默认值,例如“0” .
如何使用XSLT实现这一目标?
XSLT 1.0
<xsl:template match="/">
<Objects Version="product-0.0.1">
<xsl:apply-templates select='Users/User'/>
</Objects>
</xsl:template>
<xsl:template match="User">
<User>
<xsl:attribute name="Email"><xsl:value-of select="Email"/></xsl:attribute>
<xsl:attribute name="ShopId"><xsl:value-of select="ShopId"/></xsl:attribute>
<xsl:attribute name="ERPCustomer"><xsl:value-of select="ERPCustomer"/></xsl:attribute>
<xsl:attribute name="DisplayName"><xsl:value-of select="DisplayName"/></xsl:attribute>
</User>
</xsl:template>
例如
<Users>
<User>
<Email>asdasd@gmail.com</Email>
<ShopId>123123</ShopId>
<ERPCustomer>100</ERPCustomer>
<DisplayName>Username</DisplayName>
</User>
<User>
<Email>asdasd2@gmail.com</Email>
<ShopId></ShopId>
<ERPCustomer>100</ERPCustomer>
<DisplayName>Username</DisplayName>
</User>
<Users>
会变成
<Objects Version="product-0.0.1">
<User Email="asdasd@gmail.com" ShopId="123123" ERPCustomer="100" DisplayName="Username"></User>
<User Email="asdasd2@gmail.com" ShopId="0" ERPCustomer="100" DisplayName="Username"></User>
</Objects>
2 回答
在您的代码示例中,您可以更改
至
我会考虑改变模板匹配的方法并编写模板
对于那个特殊情况,并以此为先
处理其他转换 .
您可以将“用户”的所有子元素转换为属性,然后选择创建其值: