使用XSLT进行比较

时间:2014-12-31 03:42:04

标签: xml xslt

这是我使用XSLT完成了一些清理过程的XML。

<assets>
    <asset>
        <no>1</no>
        <type>image</type>
        <H>224 mm</H>
        <W>154 mm</W>
    </asset>
    <asset>
        <no>2</no>
        <type>image</type>
        <H>224 mm</H>
        <W>154 mm</W>
    </asset>
    <asset>
        <no>3</no>
        <type>image</type>
        <H>225 mm</H>
        <W>155 mm</W>
    </asset>
    <asset>
        <no>4</no>
        <type>image</type>
        <H>224 mm</H>
        <W>154 mm</W>
    </asset>
</assets>

现在,我必须做另一个转型过程。假设图像没有。 1是对的。我需要创建一个XSLT来检查所有图像以匹配图像1的大小。如果大小不同,它将在新节点下发布 - &gt;备注。一直在网上寻找样本,但不知道从哪里开始。对于像我这样的初学者来说,这项任务非常有用。提前谢谢。

预期产出:

<allimagesize>
    <size>224 mm x 154 mm</size>
</allimagesize>
<remarks> 
    <message>The following image has different size</message>
        <details>
            image 3 size 225 mm x 155 mm
         </details>
 </remarks>

1 个答案:

答案 0 :(得分:0)

怎么样:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:template match="/assets">
    <xsl:variable name="model-asset" select="asset[1]" />
    <xsl:variable name="non-conforming-assets" select="asset[not(H=$model-asset/H and W=$model-asset/W)]" />
    <root>
        <allimagesize>
            <size>
                <xsl:value-of select="concat($model-asset/H, ' x ', $model-asset/W)"/>
            </size>
        </allimagesize>
        <xsl:if test="$non-conforming-assets">
            <remarks> 
                <message>The following image has different size</message>
                <xsl:for-each select="$non-conforming-assets">
                    <details>
                        <xsl:value-of select="concat('image ', no, ' size ', H, ' x ', W)"/>
                    </details>
                </xsl:for-each>
            </remarks>
        </xsl:if>       
    </root>
</xsl:template>

</xsl:stylesheet>

注意

  1. 您的输出需要一个根元素才能成为格式良好的XML;

  2. 将多个事实打包到一个节点中,例如<details>image 3 size 225 mm x 155 mm</details>不是很好的XML实践。