0

我的输入文档具有有限数量的可能值。这些值需要作为聚合读取,并且现有的最高优先级报告为单个值。例如:

如果我可能的输入标签是:(但并非所有标签都始终存在并且订单不被保证)

<SomeInput>A</SomeInput>
<SomeInput>B</SomeInput>
<SomeInput>C</SomeInput>
<SomeInput>D</SomeInput>

我的优先级是 A,然后是 B,然后是 C,然后是 D。在这种情况下,我希望我的输出是:

<SomeOutput>A</SomeOutput>

如果是:

<SomeInput>D</SomeInput>
<SomeInput>B</SomeInput>

应该产生:

<SomeOutput>B</SomeOutput>

提前致谢

4

1 回答 1

0

使用

/*/*[. eq min(/*/*/string())][1]

这是一个完整的转换

<xsl:stylesheet version="2.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

 <xsl:template match="/*/*[. eq min(/*/*/string())][1]" priority="2">
     <someOutput><xsl:apply-templates/></someOutput>
 </xsl:template>
 <xsl:template match="/*/*"/>
</xsl:stylesheet>

当此转换应用于以下 XML 文档(提供的片段,包装到单个顶部元素中以使其成为格式良好的 XML 文档)时:

<t>
    <SomeInput>A</SomeInput>
    <SomeInput>B</SomeInput>
    <SomeInput>C</SomeInput>
    <SomeInput>D</SomeInput>
</t>

产生了想要的正确结果:

<SomeOutput>A</SomeOutput>

在此 XML 文档上应用相同的转换时:

<t>
    <SomeInput>D</SomeInput>
    <SomeInput>B</SomeInput>
</t>

再次产生所需的正确结果:

<SomeOutput>B</SomeOutput>
于 2013-01-17T23:46:04.527 回答