2

xqueryですべての最大値を返すにはどうすればよいですか?max()を使用しましたが、1つしか表示されません。ありがとう。

<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と正しいXPath2.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>

このXSLT2.0変換が(Saxon 9.1.05を使用して)同じXMLドキュメント(上記)に適用される場合:

<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 に答える