XMLファイルをCSVファイルに変換したいと思います。エクスポートしたいフィールドは<issues>
です。各問題には、標準フィールドとカスタムフィールドがあります。可能なカスタムフィールドは<issue-custom-fields>
に定義されています。 <issue>
にすべてのカスタムフィールドが設定されているわけではありません。 CSVのエクスポートのために、私は空のフィールド(",,"
)をそれぞれの不足しているエントリに追加する必要があります。どうすればいい?xsltテンプレート内でキーを作成
次のxsltファイルは、問題のすべてのフィールドとすべてのカスタムフィールドをループします。 「フィールド値?」の代わりに現在の項目のそれぞれのフィールド値を検索したいと思います(存在する場合は空白、存在しない場合は空白)。
XSLTのバージョンは1.0にする必要があります。以下のデータに作用する
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:apply-templates select="xml_data/issues"/>
</xsl:template>
<xsl:template match="issue">
<xsl:for-each select="*">
<xsl:choose>
<xsl:when test="name(.) = 'custom-values'">
<xsl:for-each select="/xml_data/issue-custom-fields/issue-custom-field">
<xsl:variable name="f" select="id" />
<xsl:text>field value?</xsl:text>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:transform>
:
<?xml version="1.0" encoding="UTF-8"?>
<xml_data>
<projects type="array">
<project>
<id type="integer">10</id>
<name>Helpdesk</name>
<type>open</type>
</project>
<project>
<id type="integer">20</id>
<name>Development</name>
<type>closed</type>
</project>
</projects>
<issue-custom-fields>
<issue-custom-field>
<id>1000</id>
<name>Delay</name>
</issue-custom-field>
<issue-custom-field>
<id>1001</id>
<name>Means of Delivery</name>
</issue-custom-field>
<issue-custom-field>
<id>1002</id>
<name>Shipping Date</name>
</issue-custom-field>
</issue-custom-fields>
<issues type="array">
<issue>
<id type="integer">100</id>
<project-id type="integer">10</project-id>
<subject>first helpdesk issue</subject>
<description>a small problem</description>
<custom-values>
<custom-value>
<custom-field-id>1000</custom-field-id>
<value>15</value>
</custom-value>
<custom-value>
<custom-field-id>1002</custom-field-id>
<value>2016-08-01</value>
</custom-value>
</custom-values>
</issue>
<issue>
<id type="integer">101</id>
<project-id type="integer">10</project-id>
<subject>second helpdesk issue</subject>
<description>a medium problem</description>
<custom-values>
<custom-value>
<custom-field-id>1000</custom-field-id>
<value>10</value>
</custom-value>
<custom-value>
<custom-field-id>1001</custom-field-id>
<value>FTP</value>
</custom-value>
</custom-values>
</issue>
<issue>
<id type="integer">102</id>
<project-id type="integer">10</project-id>
<subject>third helpdesk issue</subject>
<description>a huge security problem</description>
<custom-values>
<custom-value>
<custom-field-id>1001</custom-field-id>
<value>SSH</value>
</custom-value>
</custom-values>
</issue>
<issue>
<id type="integer">103</id>
<project-id type="integer">20</project-id>
<subject>first "development" issue</subject>
<description>just some "strange" software</description>
<custom-values>
</custom-values>
</issue>
</issues>
</xml_data>
あなたの助けをありがとうございました。
XMLタグを書き込むときテキストではバッククォート( ')で囲んでコードとしてフォーマットし、HTMLサニタイザでは削除しないでください。私はあなたのためにそれを固定した。 –
サンプル入力から生成する出力を表示してください。これがXSLT 1か2であるかどうかも教えてください。 –