この XSLT の場合:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="no" indent="yes" method="text" />
<xsl:strip-space elements="*" />
<xsl:template match="user[@name][@email]">
<xsl:value-of select="parent::*/@id" />
<xsl:text> - </xsl:text>
<xsl:value-of select="@name" />
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
...元の XML に対して適用されます。
<pens>
<pen id="A">
<user name="USER1" email="USER1EMAIL"/>
</pen>
<pen id="B">
<user name="USER2" email="USER2EMAIL"/>
</pen>
<pen id="C"/>
<pen id="D">
<user name="USER3" email="USER3EMAIL"/>
</pen>
</pens>
...必要な結果が生成されます。
A - USER1
B - USER2
D - USER3
説明:
要素の@method
属性に値を設定します(テキスト結果に関心があるため)。<xsl:output>
text
1 つのテンプレートは、 および属性が定義され<user>
ている要素に一致します。@name
@email
そのような<user>
要素が 1 つ見つかると、その親要素の@id
属性の値、ダッシュ、要素の@name
属性の値、最後に改行文字を出力します。
この結果をファイルに保存する方法は、使用している XSLT プロセッサによって異なります。コマンド ラインを介して変換を実行する場合 (たとえば、この方法で実行する場合xsltproc
)、次のようなことができます。
$ xsltproc t.xsl input.xml > output.xml