2

ねえ、私は問題に達したxsltを学び始めたところです。私は次のようなxmlファイルを持っています:

<projects>
<project nr="1">
<description>z</description>
<description>a</description>
</project>
</projects>

そのようなプロジェクトはほとんど説明がなく、私がやろうとしているのは、すべてのプロジェクトからのすべてのソートされた説明を含むhtmlテーブルを作成することです。全体として、2つの説明を持つ5つのプロジェクトがある場合、10のソートされた行があります。これまでのところ、すべてのプロジェクトの最初の説明を並べ替えることができましたが、2番目の説明を含める方法や、3番目の4番目の説明があるかどうかなどわかりません。手がかりはありますか?手伝ってくれてありがとう。

@editこれまでフラットファイルから始めましたが、それは問題ではありません。今のところ私は持っています

<xsl:output method="text"/>
<xsl:template match="projects">
<xsl:apply-templates>
<xsl:sort select="description" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="project">
 Description: <xsl:apply-templates select="description"/>
<xsl:text>
 </xsl:text>
 </xsl:template>

私はfor:eachループをいじっていますが、正直に言うと、これをどのように行うべきかわかりません。

4

2 に答える 2

0

この変換:

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

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="/*">
  <xsl:copy>
   <xsl:apply-templates select="*/description">
    <xsl:sort/>
   </xsl:apply-templates>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

次の XML ドキュメントに適用した場合(提供されたものに基づいて拡張):

<projects>
    <project nr="1">
        <description>z</description>
        <description>a</description>
    </project>
    <project nr="2">
        <description>b</description>
        <description>y</description>
    </project>
    <project nr="3">
        <description>c</description>
        <description>x</description>
    </project>
    <project nr="4">
        <description>d</description>
        <description>w</description>
    </project>
    <project nr="5">
        <description>e</description>
        <description>u</description>
    </project>
</projects>

必要な結果を生成します:

<projects>
   <description>a</description>
   <description>b</description>
   <description>c</description>
   <description>d</description>
   <description>e</description>
   <description>u</description>
   <description>w</description>
   <description>x</description>
   <description>y</description>
   <description>z</description>
</projects>
于 2013-03-18T01:09:58.620 に答える
0

そうです、次のような for-each ループを使用する必要があります。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:for-each select="//project/description">
      <xsl:sort select="." />
      <xsl:copy-of select="."/>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

<description>これにより、すべてのプロジェクトのすべてのノードが昇順にソートされて返されます。それらの非 xml 表現を返したい場合は、<xsl:copy-of select="."/>ノードをDescription: <xsl:value-of select="."/>または好きなものに置き換えることができます。

于 2013-03-18T01:10:42.783 に答える