XSLT实现XML转换:preferred元素缺失时取primary值填充
XSLT可选preferred元素自动补全实现
实现逻辑
- 基于XSLT身份转换模板做基础处理,默认完整保留输入XML中所有已存在的节点、属性、文本内容,避免原有数据被意外修改
- 单独匹配所有不包含
<preferred>子元素的<image>节点,在复制完该节点原有全部内容后,补充插入<preferred>节点,取值与当前<image>节点下的<primary>元素值一致 - 对已经存在
<preferred>元素的<image>节点不做任何额外处理,完全保留原有preferred值
可直接使用的XSLT代码(兼容XSLT 1.0及以上版本)
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 身份模板:原样复制所有现有节点、属性、文本内容 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 处理无preferred子元素的image节点 --> <xsl:template match="image[not(preferred)]"> <xsl:copy> <!-- 先复制当前image的所有属性和原有子节点 --> <xsl:apply-templates select="@*|node()"/> <!-- 补充preferred元素,取值取同节点下primary的值 --> <preferred> <xsl:value-of select="primary"/> </preferred> </xsl:copy> </xsl:template> </xsl:stylesheet>
效果验证
针对给出的测试输入,转换结果完全符合预期:
- id为
i1的image节点无preferred元素,自动补充<preferred>true</preferred>,与primary值一致 - id为
i2的image节点已存在<preferred>false</preferred>,原值完整保留
内容的提问来源于stack exchange,提问作者Ramya Shankar
相关产品推荐
相关产品推荐

