XML ファイルをタブ区切りファイルに変換する XSLT ファイルがあります。ファイルに列ヘッダーも追加しました。
XSLT を使用してヘッダーを列に並べて取得することは可能ですか?
ここに私のXSLTファイルがあります:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="wdexample.com" version="1.0">
<xsl:output method="text" encoding="utf-8" media-type="text/plain" />
<xsl:strip-space elements="*" />
<xsl:variable name="newline" select="'
'" />
<xsl:variable name="tab" select="'	'" />
<xsl:template match="/">
FAO
<xsl:value-of select="$tab" />
FAO_REFERENCE_ID
<xsl:value-of select="$tab" />
FAO_TYPE
<xsl:value-of select="$tab" />
COMPANY_OF_FAO_DESCRIPTOR
<xsl:value-of select="$tab" />
COMPANY_OF_FAO_Custom_Worktag_1_ID
<xsl:value-of select="$newline" />
<xsl:for-each select="/wd:Report_Data/wd:Report_Entry">
<xsl:value-of select="substring(concat(wd:FAO, ''), 1)" />
<xsl:value-of select="$tab" />
<xsl:value-of select="substring(concat(wd:FAO_REFERENCE_ID, ''), 1, 8)" />
<xsl:value-of select="$tab" />
<xsl:value-of select="substring(concat(wd:FAO_TYPE, ''), 1)" />
<xsl:value-of select="$tab" />
<xsl:value-of select="substring(concat(wd:COMPANY, ''), 1)" />
<xsl:value-of select="$tab" />
<xsl:value-of select="substring(concat(wd:COMPANY_TYPE, ''), 1)" />
<xsl:value-of select="$tab" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
入力 XML は次のとおりです。XML ファイルでは、各 Report_Entry ノードの値が常に存在するとは限りません。
<?xml version="1.0" encoding="UTF-8"?>
<wd:Report_Data xmlns:wd="wdexample.com">
<wd:Report_Entry>
<wd:FAO>testFAO</wd:FAO>
<wd:FAO_REFERENCE_ID>testRefID</wd:FAO_REFERENCE_ID>
<wd:FAO_TYPE>testType</wd:FAO_TYPE>
<wd:COMPANY>testCompany</wd:COMPANY>
<wd:COMPANY_TYPE>testCompanyType</wd:COMPANY_TYPE>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:FAO>testFAO</wd:FAO>
<wd:FAO_REFERENCE_ID>testRefID<</wd:FAO_REFERENCE_ID>
<wd:FAO_TYPE></wd:FAO_TYPE>
<wd:COMPANY></wd:COMPANY>
<wd:COMPANY_TYPE>testCompanyType</wd:COMPANY_TYPE>
</wd:Report_Entry>
...
</wd:Report_Data>
レポート エントリ ノードが複数回繰り返されます。ご参考までsubstring(concat())
に、将来列を埋める必要がある場合に備えて、そこに関数があります。
列に値がない場合に備えて、パディングを使用して列にその列タイトルと同じ幅を与えることを検討しています。それを行うより良い方法はありますか?
私の質問の要約: 1) 列ヘッダーを列と並べることは可能ですか? 2)列とヘッダーを並べて並べるより良い方法はありますか?