Это 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>
- это выводит пробел, если мы не достигли последнего элемента (таким образом, предотвращая прослеживание пробелов).
Большое спасибо –