0

私は次のxmlを持っています:

<!-- language: lang-xml -->

<Report_Entry>
<Employee_ID> 1 </Employee_ID>
<First_Name>John</First_Name>
<Last_Name>Smith</Last_Name>
<Primary_Address>4200 Holly Hall Street, #18</Primary_Address>
<Hire_Date>2000-01-02-08:00</Hire_Date>
</Report_Entry>

<Report_Entry>
<Employee_ID> 2 </Employee_ID>
<First_Name>Julie</First_Name>
<Last_Name>Ray</Last_Name>
<Primary_Address>255 Gregor Street</Primary_Address>
<Hire_Date>2000-05-01-08:00</Hire_Date>
</Report_Entry>

このようなレポート エントリ要素が 500 あります。出力を次のようにしたい:

1, John, Smith, 4200 Holly Hall Street #18, 01-02-2000
2, Julie, Ray, 255 Gregor Street, 05-01-2000
など...

上記の XML を変換するために私が書いた XSLT コードを次に示します。

<!-- language: lang-xslt -->
<xsl:template match="Report_Entry">
<xsl:for-each select="*">
     <xsl:value-of select="."/>
          <xsl:if test="position() != last()">
              <xsl:value-of select="','"/>
          </xsl:if>
</xsl:for-each>
<xsl:text>&#10;</xsl:text>   

</xsl:template>

私は2つのことを達成できません:

  1. Primary_Address 要素のすべてのカンマをスペースに置き換えたい
  2. Hire_Date 要素の日付形式を目的の形式 (mm-dd-yyyy) に変更します。

上記の2つの問題を解決するために誰かが私を助けてくれれば幸いです.....

4

1 に答える 1

1

コンマをスペースに置き換えるには、翻訳機能を利用できます。

<xsl:value-of select="translate(., ',', ' ')"/>

ただし、この関数を以前に見たことがない場合は注意してください。通常の「置換」関数とはまったく同じように機能しないためです。単一の文字のみを他の文字に変換します。一致する文字列を他の文字列に置き換えません。(XSLT 2.0 を使用している場合は、「置換」機能が利用可能です)。

日付のフォーマットに関しては、Hire_Date が常に同じフォーマットであると仮定して、ここで部分文字列関数を使用してフィールドを再配置できます。

 <xsl:value-of select="concat(substring(., 6, 2), '-', substring(., 9, 2), '-' , substring(., 1, 4))"/>

xsl:for-eachの代わりにテンプレートを使用するように XSLT を再配置する価値があるかもしれません。これは、Hire_Date のコードを独自のテンプレートに記述するのに役立ちます。さらに、Hire_Dateが常に最後の要素になる場合は、その位置でxsl:ifテストを削除できます。

この XSLT を試してください:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="Report_Entry">
    <xsl:apply-templates select="*" />
    <xsl:text>&#10;</xsl:text>
  </xsl:template>

  <xsl:template match="Report_Entry/*[not(self::Hire_Date)]">
    <xsl:value-of select="translate(., ',', ' ')"/>
    <xsl:value-of select="','"/>
  </xsl:template>

  <xsl:template match="Hire_Date">
    <xsl:value-of select="concat(substring(., 6, 2), '-', substring(., 9, 2), '-' , substring(., 1, 4))"/>
  </xsl:template>
</xsl:stylesheet>
于 2013-09-03T07:50:09.217 に答える