1

ノードを次のように変換したいと思います。

<Element>
      <Type>Type1</Type>
      <Quantity>q1</Quantity>
</Element>

(型ノードの値は列挙型から取得されます) に:

<Element>
  <Type1>q1</Type1>
</Element>

両方のノードが存在する場合のみ。それ以外の場合、ノード<Quantity>が存在しない<LastDate>が代わりにノードが存在する場合、このノード:

<Element>
  <Type>Date</Type>
  <LastDate>date string</LastDate>
</Element>

になります:

<Element>
  <Date>date string</Date>
</Element>

したがって、新しいノードの名前は常にノードの値から取得されます<Type>が、その値は親<Element>ノードの別の子ノード (存在する場合) から取得される場合があります。値を含む子ノードは、ノードとともに最終出力で削除され<Type>ます。

Linq to XML C# コードでこれを行うのに問題はありません。ただし、この種の変換は複数の異なるノードに適用される可能性があるため、どのノードがどのように影響を受けるかを指定する、プログラムへのコマンド ライン入力が複雑になります。

対照的に、xslt には、単純な変換を自己文書化するという付加価値があります。

4

1 に答える 1

3

<xsl:element>薄い空気から要素を作成するために使用します。

したがって、次のようなものが必要です(タイプミスについてはテストされていません):

  <xsl:template match="Element">
    <xsl:copy>
      <xsl:element name="{Type}">
        <xsl:copy-of select="(Quantity|LastDate)/node()"/>
      </xsl:element>
    </xsl:copy>
  </xsl:template>

このコードは要素をコピーし<Element>、子要素のコンテンツの名前を使用して、何もないところから子要素を作成します<Type>

中かっこの使用は属性値テンプレートであり、その中の XPath アドレスは<xsl:value-of>命令のように評価されます。

于 2013-06-23T00:58:32.567 に答える