この 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="yes" indent="yes" method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:apply-templates select="*/*[1]/*"/>
</xsl:template>
<xsl:template match="*">
<xsl:variable name="vPos" select="position()"/>
<xsl:if test="position() > 1"> </xsl:if>
<xsl:value-of
select="concat(.,
' ',
../following-sibling::*/*[position() = $vPos])"/>
</xsl:template>
</xsl:stylesheet>
...元の XML に適用すると:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Edited by XMLSpy® -->
<Company>
<EmployeeDetail>
<Employees>
<name>Vishal</name>
<name>Ranvijay</name>
<name>Jagmit</name>
</Employees>
<Employees>
<name>Verma</name>
<name>Sahay</name>
<name>Singh</name>
</Employees>
</EmployeeDetail>
</Company>
...あなたが望む出力を生成します:
Vishal Verma Ranvijay Sahay Jagmit Singh
説明:
- 最初のテンプレートは最上位の要素と一致します。それが見つかると、XSLT プロセッサは、最初の
<Employees>
要素のすべての子要素にテンプレートを適用するように指示されます。
- 2 番目のテンプレートは、任意の要素に一致します (XSLT 内に他の呼び出しが 1 つしかない場合
<xsl:apply-templates>
、最初の要素の任意の子要素に一致します<Employees>
)。そのような要素を見つけると、プロセッサはその現在の要素の値、スペース、および隣接する<name>
要素 (つまり、<name>
現在の要素と同じ位置にあるが、2 番目の<Employees>
要素のコンテキスト内に存在する要素) の値を出力します。 )。
- -の使用に注意してください。
<xsl:if test="position() > 1"> </xsl:if>
これは、最後の要素に到達しない限りスペースを出力します (したがって、末尾の空白を防ぎます)。