3

最初にいくつかの要素を並べ替えて、それらを(すでに並べ替えられている)変数に格納できるかどうか疑問に思いました。XSLTと考えて参照する必要があるので、変数に格納したいと思います。

私は次のことをしようとしていましたが、うまくいかないようです

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 version="1.0">

<xsl:variable name="deposits">
  <xsl:for-each select="/BookingCostings/MultiDeposits">
    <xsl:sort select="substring(@DepositDate, 1, 4)" />
    <xsl:sort select="substring(@DepositDate, 6, 2)" />
    <xsl:sort select="substring(@DepositDate, 9, 2)" />
 </xsl:for-each>
</xsl:variable>

要素を@DepositDate「yyyy-mm-dd」の形式で並べ替えて、すべて$deposits変数に格納しようとしていました。後で、を使用してそれらにアクセスできるようにし$deposits[1]ます。

ヘルプとヒントをいただければ幸いです。

どうもありがとう!

4

3 に答える 3

5
  1. を使用すると、変数が(")を使用するシーケンスのタイプであることを使用して伝えることXSLT version 2.0ができます。perform-sortMultiDepositsas keywordas="element(MultiDeposits)+
  2. データはすでにyyyy-mm-ddであるため、subtringを使用して日付の各部分を取得し、フィールドで直接並べ替えを使用することを回避できます。

このサンプルxmlを使用して:

<?xml version="1.0" encoding="ISO-8859-1"?>
<BookingCostings>
  <MultiDeposits depositDate="2001-10-09">1</MultiDeposits>
  <MultiDeposits depositDate="1999-10-09">2</MultiDeposits>
  <MultiDeposits depositDate="2010-08-09">3</MultiDeposits>
  <MultiDeposits depositDate="2010-07-09">4</MultiDeposits>
  <MultiDeposits depositDate="1998-01-01">5</MultiDeposits>
</BookingCostings>

XSLTバージョン2.0シートの使用:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/">
 <html>
  <body>

  <xsl:variable name="deposits" as="element(MultiDeposits)+">
   <xsl:perform-sort select="BookingCostings/MultiDeposits">
    <xsl:sort select="@depositDate"/>
   </xsl:perform-sort>
  </xsl:variable>

  first date:<xsl:value-of select="$deposits[1]/@depositDate"/>,
  last date:<xsl:value-of select="$deposits[last()]/@depositDate"/>

  </body>
 </html>
 </xsl:template>

</xsl:stylesheet>

出力は次のようになります。

first date:1998-01-01, last date:2010-08-09
于 2010-02-16T15:34:24.050 に答える
4

まず、変数宣言で、新しいノードを作成するために何かをする必要があります。厳密に言えば、あなたはそれらを分類しているのではなく、与えられた順序でそれらを読んでいるだけです。ある種のxsl:copyコマンドを追加する必要があると思います。

<xsl:variable name="deposits"> 
  <xsl:for-each select="/BookingCostings/MultiDeposits"> 
    <xsl:sort select="substring(@DepositDate, 1, 4)" /> 
    <xsl:sort select="substring(@DepositDate, 6, 2)" /> 
    <xsl:sort select="substring(@DepositDate, 9, 2)" /> 
    <xsl:copy-of select=".|@*" />
 </xsl:for-each> 
</xsl:variable> 

これが作成するのは「ノードセット」ですが、それにアクセスするには、XSLTの拡張機能を利用する必要があります。どちらを使用するかは、使用しているXSLTプロセッサーによって異なります。これから説明する例では、Microsoftのものを使用しています。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" version="1.0"> 

次に、変数内のノードにアクセスするには、次のようにします。

<xsl:value-of select="ms:node-set($deposits)/MultiDeposits[1]/@DepositDate" />

これはノードセットについて読むのに良い記事です

ノードセットに関するXml.comの記事

于 2010-02-16T11:36:04.897 に答える
-1

推測(開発環境を手に入れる必要はありません):

追加 <xsl:value-of select="." />

閉会前</xsl:for-each>

于 2010-02-16T10:37:58.980 に答える