2

如何返回 xquery 中的所有最大值?我使用了 max() 但它只给了我一个!谢谢。

<id>a</id>
<average>5</average>
<id>b</id>
<average>5</average>
<id>c</id>
<average>5</average>
<id>d</id>
<average>4</average>
<id>e</id>
<average>1</average>

我希望我的结果是:

<id>a</id>
<id>b</id>
<id>c</id>

谢谢!

4

1 回答 1

1

使用

/*/id[following-sibling::*[1]/number() eq max(/*/average)]

以上是正确的 XQuery 和正确的 XPath 2.0 解决方案。

使用 Saxon EE 9.3.04 XQuery 进行验证

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

<t>
    <id>a</id>
    <average>5</average>
    <id>b</id>
    <average>5</average>
    <id>c</id>
    <average>5</average>
    <id>d</id>
    <average>4</average>
    <id>e</id>
    <average>1</average>
</t>

产生了想要的正确结果

<?xml version="1.0" encoding="UTF-8"?><id>a</id><id>b</id><id>c</id>

当对同一个 XML 文档(上图)应用此 XSLT 2.0 转换(使用 Saxon 9.1.05)时

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

 <xsl:template match="/">
  <xsl:sequence select=
   "/*/id[following-sibling::*[1]/number() eq max(/*/average)]"/>
 </xsl:template>
</xsl:stylesheet>

再次产生相同的正确结果:

<id>a</id>
<id>b</id>
<id>c</id>
于 2012-11-24T02:12:31.130 回答