CSV に変換したい Dublin Core でエンコードされたメタデータ ファイルを使用しています。以下の出力に到達しようとしています
identifier1|||identifier2|||identifier3|||identifier4,datestamp1|||datestamp2|||2010-04-27T01:10:31Z,setspec1,title1|||title2,subject1|||subject2,baseURL|||xxxxx|||xxxxx
繰り返し可能な要素は 3 つのパイプ記号 (|||) で区切られ、要素はコンマ (,) で区切られていることに注意してください。
以下のスタイルシートにたどり着きましたが、次のことに苦労しています
(1) コンマでノードを区切ることができるように汎用テンプレートを定義するにはどうすればよいですか?
<xsl:template match="GENERIC MATCH">
<xsl:apply-templates select="current()" />
<xsl:if test="position() = last()">,</xsl:if>
</xsl:template>
以下を例として使用Input File
すると、基本的に、GENERIC MATCH を使用してlevel 2
、ノード (ヘッダー、メタデータなど) を動的に処理し、結果をコンマで区切ることができるようになります。
(2)要素が最後の子ノードであるかどうかを判断するにはどうすればよいですか?条件付きで後にカンマを含めることができますか?
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="record" />
</xsl:template>
<xsl:template match="record">
<xsl:apply-templates select="//metadata/oai_dc:dc/dc:title|//metadata/oai_dc:dc/dc:subject" />
<xsl:if test="not(metadata/oai_dc:dc/node()/position()=last())">#####</xsl:if>
</xsl:template>
<xsl:template match="dc:title">
<xsl:value-of select="." />
<xsl:if test="not(position() = last())">||</xsl:if>
</xsl:template>
<xsl:template match="dc:subject">
<xsl:value-of select="." />
<xsl:if test="not(position() = last())">||</xsl:if>
</xsl:template>
入力ファイル
<?xml version="1.0"?>
<record>
<header>
<identifier>identifier1</identifier>
<datestamp>datastamp1</datestamp>
<setSpec>setspec1</setSpec>
</header>
<metadata>
<oai_dc:dc>
<dc:title>title1</dc:title>
<dc:title>title2</dc:title>
<dc:creator>creator1</dc:creator>
<dc:subject>subject1</dc:subject>
<dc:subject>subject2</dc:subject>
</oai_dc:dc>
</metadata>
<about>
<provenance>
<originDescription altered="false" harvestDate="2011-08-11T03:47:51Z">
<baseURL>baseURL1</baseURL>
<identifier>identifier3</identifier>
<datestamp>datestamp2</datestamp>
<metadataNamespace>xxxxx</metadataNamespace>
<originDescription altered="false" harvestDate="2010-10-10T06:15:53Z">
<baseURL>xxxxx</baseURL>
<identifier>identifier4</identifier>
<datestamp>2010-04-27T01:10:31Z</datestamp>
<metadataNamespace>xxxxx</metadataNamespace>
</originDescription>
</originDescription>
</provenance>
</about>
</record>
xslt 1.0
を使用して作業していxsltproc
ます。