这个 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>
。
- 第二个模板匹配任何元素(假设在 XSLT 中只有一个其他调用
<xsl:apply-templates>
,它匹配第一个元素的任何子<Employees>
元素)。找到这样的元素后,处理器输出该当前元素的值、一个空格和相邻<name>
元素的值(意思是,与<name>
当前元素存在于相同位置但在第二个元素的上下文中的<Employees>
元素)。
- 注意使用
<xsl:if test="position() > 1"> </xsl:if>
- 这会输出一个空格,除非我们已经到达最后一个元素(从而防止尾随空格)。