-1

XSLT を使用して作業しているプロジェクトの姓ディレクトリを構築しようとしています。最終的にはこんな姿になりたいです。XSLT でセクション検索のインデックス グループを取得して、その人の姓の最初の文字を表示する場所を指定し、さらに、その人の姓の最初の文字に基づいて、結果の各セクションでグループ化するようにします。 .

以下のサンプルをご覧ください。


検索条件: ACFGJ

アンダーソン・
アンドリュース
・アリソン

C

チャールズ

フレデリックス・
フランクス

G

ガレット

J

ジョンソン
・ジェームズ

人物の姓の最初のイニシャルを適切な文字 (セクション A Anderson、Andrews、Allison....J Johnson James) の下に配置するセクションの Muenchian グループ化を試みましたが、うまくいきました。

この同じコードを使用して、XML のデータに基づいて人の姓の最初の文字を表示する ACFGJ による検索を生成するセクションに適用しようとしました。コードを試してみたところ、このセクションの結果は返されませんでした。

誰かがこれを手伝ってくれますか?ありがとう

乾杯


アップデート

OP は、この入力ドキュメントを変換したいと考えています ...

<people>
 <person><lastname>Johnson</lastname></person>
 <person><lastname>James</lastname></person>
 <person><lastname>Charles</lastname></person>
 <person><lastname>Franks</lastname></person>
 <person><lastname>Anderson</lastname></person>
 <person><lastname>Allison</lastname></person>
 <person><lastname>Fredericks</lastname></person>
 <person><lastname>Andrews</lastname></person>
</people>

... XSLT を使用して、上記のテキスト形式の出力ドキュメントに変換します。OP が XSLT 1.0 と 2.0 のどちらを使用しているかは不明です。検索文字は、スペースで区切られた大文字のリストとして書式設定されたスタイル シート パラメーターとしてスタイル シートに提供され、次のように宣言されます ...

<xsl:param name="search-by" select="'A C F G J'" />

これらの文字は既にアルファベット順に並べ替えられており、大文字に制限されていると想定できます。

4

1 に答える 1

0

パラメーターごとに並べ替え文字を指定している場合、ミューンチャン グループ化は必要ありません。

この XSLT 1.0 スタイルシート...

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:param name="search-by" select="'A C F G J'" />

<xsl:key name="section" match="person" use="substring( lastname, 1, 1)" />

<xsl:template match="/">
Search by: <xsl:value-of select="$search-by" /><xsl:value-of select="'&#x0A;&#x0A;'" />   
  <xsl:call-template name="do-section">
    <xsl:with-param name="sections" select="$search-by" /> 
  </xsl:call-template>  
</xsl:template>

<xsl:template name="do-section">
 <xsl:param name="sections" />
 <xsl:if test="$sections != ''" > 
  <xsl:variable name="letter" select="substring($sections,1,1)" />
  <xsl:value-of select="concat( $letter, '&#x0A;&#x0A;')" />
  <xsl:for-each select="key('section',$letter)">
   <xsl:sort data-type="text" /> 
   <xsl:value-of select="concat( lastname, '&#x0A;')" />   
  </xsl:for-each>   
  <xsl:value-of select="'&#x0A;'" />   
  <xsl:call-template name="do-section">
    <xsl:with-param name="sections" select="substring($sections,3)" /> 
  </xsl:call-template>  
 </xsl:if> 
</xsl:template>  

</xsl:stylesheet>

... 入力スタイルシート パラメータ $search-by='ACFG J' で適用され、この入力ドキュメントに適用されます ...

<people>
 <person><lastname>Johnson</lastname></person>
 <person><lastname>James</lastname></person>
 <person><lastname>Charles</lastname></person>
 <person><lastname>Franks</lastname></person>
 <person><lastname>Anderson</lastname></person>
 <person><lastname>Allison</lastname></person>
 <person><lastname>Fredericks</lastname></person>
 <person><lastname>Andrews</lastname></person>
</people>

... このテキスト ドキュメントを生成します ...

Search by: A C F G J

A

Allison
Anderson
Andrews

C

Charles

F

Franks
Fredericks

G


J

James
Johnson
于 2012-07-06T01:40:31.897 に答える