1

ノード NADR_KOD の名前を NADR_KOD2 に変更し、残りの XML を変更せずにコピーする XSLT 変換があります。今日、属性を要素に変更する別の変換を追加したかったのですが (スタックで解決策を見つけました)、1 つの xslt でこれら 2 つの変換が機能しません...

SSISに「日付」属性をロードできないため、問題が発生しました。XML ソースは常に日付を null として返します。多分あなたはこの問題で私を助けることができますか?

XML の構造:

<DATA>
<ACCIDENT date="...">


 <INFO>
 <TEMP>
  <NADR_KOD>
   <NADR_KOD>Code</NADR_KOD>
  </NADR_KOD>
 </TEMP>
 </INFO>

</ACCIDENT>
</DATA>

これが私が欲しかったものです:

<DATA>
<ACCIDENT>
 <date>...</date>

 <INFO>
 <TEMP>
  <NADR_KOD>
   <NADR_KOD2>Code</NADR_KOD2>
  </NADR_KOD>
 </TEMP>
 </INFO>

</ACCIDENT>
</DATA>

私はこれらのような同様の変換をいくつか持っています。これが私がこれを作った方法です:

  <xsl:template match="ACCIDENT">
  <!-- output a filter element -->
  <xsl:element name="ACCIDENT">
    <!-- add the name attribute, using the source name attribute value -->


   <xsl:element name="date">
     <xsl:value-of select="@date"/>
   </xsl:element>

   <!-- add the rest of attributes without change -->
   <xsl:copy-of select="node()"/>
 </xsl:element>


 </xsl:template>

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

このコードは NADR_KOD を NADR_KOD2 に変更しません。前もって感謝します...

4

1 に答える 1

0

代わりに思う

<!-- add the rest of attributes without change -->
   <xsl:copy-of select="node()"/>

あなたは単に欲しい

<!-- run the child elements through the identity transformation template for copying
     or my templates for transforming -->
<xsl:apply-templates/>

その後、使用できます

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

そしてもちろんあなたの

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

さらに要素を変換したい場合は、それらのテンプレートを追加できます。

于 2013-09-11T15:47:09.697 に答える