3

最初の編集子1
タグを C# フォームの DropDownList に フェッチしています。Plzは、XML ファイル内の親タグとすべての子タグを削除するためのベスト プラクティス コード (C#) を提案します。例:

    <Parents>
      <Parent>
        <Child 1>Something</Child 1>
        <Child 2>Something</Child 2>
        <Child 3>Something</Child 3>
        <Child 4>Something</Child 4>
      </Parent>
      <Parent>
        <Child 1>Something 1</Child 1>
        <Child 2>Something 1</Child 2>
        <Child 3>Something 1</Child 3>
        <Child 4>Something 1</Child 4>
      </Parent>
    </Parents>

---前の質問---
C# コードを使用して作成した新しい xml ファイルに次のスタイルシート タグを挿入するにはどうすればよいですか????

<?xml-stylesheet type="text/xsl" href="issuez.xsl"?>

xml ファイルを作成する C# コード:-

new XDocument(
                        new XElement("issues",
                            new XElement("issue",
                            new XElement("cat", comboBox1.Text),
                            new XElement("desc", richTextBox1.Text),
                            new XElement("end", dateTimePicker1.Text),
                            new XElement("att", textBox2.Text)
                            )
                        )
                        ).Save(path);
4

4 に答える 4

4

まず、XML 内の日付が正規の YYYY-MM-DD 形式で表され、時刻が HH:MM:SS として表されていることを確認して、XSLT (1.0 では日付または時刻のデータ型を持たない) が比較できるようにします。そしてそれらを並べ替えます。

次に、Steve Muench の手法を使用してグループ化します。を使用して、アイテムの日付に関するキーを生成しますxsl:key。このkey()関数を使用して、特定の日付のすべてのアイテムのリストを検索できます。

そのキーを使用して、アイテムに表示される個別の日付のリストを作成できます。これは Muenchian の手法です: key() が返すリストの最初の項目である各項目を、その項目の日付で見つけます。この手法により、異なる日付値ごとに常に 1 つのアイテムのみが取得されることが保証されます。次に、それらのアイテムを並べ替え、それらの日付を使用して、出力の実際の生産を促進します。

最小限の例:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:key name="dates" match="/data/newsitem" use="@date"/>

  <xsl:template match="/">
    <output>
      <!-- find exactly one newsitem node for each distinct @date in the document -->
      <xsl:for-each select="/data/newsitem[generate-id() = generate-id(key('dates', @date)[1])]">
        <xsl:sort select="@date" order="descending"/>
        <xsl:call-template name="newsitems_for_date">
          <xsl:with-param name="date" select="@date"/>
        </xsl:call-template>
      </xsl:for-each>
    </output>
  </xsl:template>

  <xsl:template name="newsitems_for_date">
    <xsl:param name="date"/>
    <h1>
      <xsl:value-of select="$date"/>
    </h1>
    <xsl:apply-templates select="/data/newsitem[@date=$date]">
       <xsl:sort select="@time" order="descending"/>
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="newsitem">
    <p>
      newsitem for <xsl:value-of select="@date"/>
    </p>
  </xsl:template>

</xsl:stylesheet>
于 2010-03-09T16:39:57.233 に答える
2

これは、XML を生成するバックエンドが処理する必要のある種類のものです。XSLT は、多くのロジックに最適な場所ではありません。ニュース項目を照会した後で、これらすべてを XML に埋め込む方がよいでしょう。適切な形式でクライアントに送信するだけで、それほど苦労する必要はありません。

于 2010-03-08T10:55:39.337 に答える
1

XSLT スタイルシートでは、変換を実行する前に設定できるグローバル パラメーターを使用できます。したがって、スタイルシートで現在の日付が必要な場合は、XSLT 1.0 と .NET の XslCompiledTransform を使用して、グローバル パラメーターを定義できます。

  <xsl:param name="current-date"/>

XsltArgumentList を作成して変換を実行する前にそれを設定し、パラメーターを必要な値と形式に設定してから、その XsltArgumentList を 2 番目の引数として Transform メソッドに渡します。次に、スタイルシートで、XML 入力要素または属性の日付をパラメーターと比較できます。

.NET を使用する場合、別のオプションは XSLT 2.0 を使用することです。Microsoft はそれをサポートしていませんが、Saxon 9にはサード パーティのソリューションがあります。XSLT/XPath 2.0 にはcurrent-dateという名前の関数があるため、パラメーターは必要ありません。

于 2010-03-08T12:54:32.607 に答える
0

PHP から XSLT プロセッサを使用する場合は、XSLT スクリプト内で PHP 関数を使用できます。必要なのは、変換前に registerPhpFunctions を呼び出すことだけです。正しい順序の結果値は、ソートに使用できます。

于 2010-03-08T12:08:21.000 に答える