スポンサーリンク

[XSLT] xmlのデータを変換せずにコピーしてそのまま出力する

xmlのデータを変換せずにそのまま出力する

XSLT変換で、xmlのデータをそのまま全部取得したいときにどのようなコードを書けばよいか記載。

それにプラスアルファで、要素を追加したり削除したりするのは別記事にて記載。

ソースコード

xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sample.xsl"?>
<root>
    <head>
        <title name="タイトル">従業員表</title>
    </head>
    <data>
        <item itemid="1">名前</item>
        <item itemid="2">年齢</item>
        <item itemid="3">部署</item>
    </data>

</root>

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

変換結果

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sample.xsl"?>
<root>
    <head>
        <title name="タイトル">従業員表</title>
    </head>
    <data>
        <item itemid="1">名前</item>
        <item itemid="2">年齢</item>
        <item itemid="3">部署</item>
    </data>

</root>

 

解説

変換しないで抽出している箇所は下記。

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

@*は全ての属性ノード、node()は属性ノード以外を除く全てのノードなので、
これをノード集合の和として使う”|”をつかって、全てのノードをコピーしている。

XSLT
スポンサーリンク
シェアする
trelab