xml for testing
<?xml version="1.0" encoding="UTF-8"?>
<alpha>
<table name="tab1">
<data>
<prop>
<name>abc</name>
<value>123</value>
<ismultival>0</ismultival>
</prop>
<prop>
<name>xyz</name>
<value>456</value>
<ismultival>0</ismultival>
</prop>
<prop>
<name>lmn</name>
<value>789</value>
<ismultival>0</ismultival>
</prop>
</data>
<data>
<prop>
<name>xyz</name>
<value>987</value>
<ismultival>0</ismultival>
</prop>
<prop>
<name>nml</name>
<value>654</value>
<ismultival>2</ismultival>
</prop>
<prop>
<name>cba</name>
<value>321</value>
<ismultival>0</ismultival>
</prop>
</data>
</table>
<table name="tab2">
<data>
<prop>
<name>asd</name>
<value>147</value>
<ismultival>2</ismultival>
</prop>
<prop>
<name>qwe</name>
<value>852</value>
<ismultival>0</ismultival>
</prop>
<prop>
<name>zxc</name>
<value>369</value>
<ismultival>1</ismultival>
</prop>
</data>
</table>
</alpha> props.xml
<?xml version="1.0"?>
<props>
<prop>
<name>abc</name>
</prop>
<prop>
<name>xyz</name>
</prop>
<prop>
<name>lmn</name>
</prop>
</props> <?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:variable name="search" select="document('props.xml')//name"/>
<xsl:template match="/">
<output>
<data>
<xsl:variable name="cn" select="count($search)"/>
<xsl:value-of select="$cn"/>
<xsl:for-each select="$search">
<xsl:choose>
<xsl:when test="position() = $cn">
<xsl:value-of select="concat(position(),' ',.)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(position(),' ',.,',')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</data>
<xsl:apply-templates select="alpha"/>
</output>
</xsl:template>
<xsl:template match="alpha">
<xsl:apply-templates select="table[@name='tab1']" mode="tab1"/>
</xsl:template>
<xsl:template match="table" mode="tab1">
<xsl:apply-templates select="data"/>
</xsl:template>
<xsl:template match="data">
<xsl:apply-templates select="prop"/>
</xsl:template>
<xsl:template match="prop">
<xsl:variable name="found" select="."/>
<xsl:for-each select="$search">
<xsl:if test="$found/name = .">
<prop>
<name>
<xsl:value-of select="$found/name"/>
</name>
<vaule>
<xsl:value-of select="$found/value"/>
</vaule>
</prop>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
result
<?xml version='1.0' encoding='UTF-8' ?>
<output>
<data>31 abc,2 xyz,3 lmn</data>
<prop>
<name>abc</name>
<vaule>123</vaule>
</prop>
<prop>
<name>xyz</name>
<vaule>456</vaule>
</prop>
<prop>
<name>lmn</name>
<vaule>789</vaule>
</prop>
<prop>
<name>xyz</name>
<vaule>987</vaule>
</prop>
</output>
or it may be that and xml2 xml1
and the desired results fit together
can not produce the desired results-I
I do not why the mistake with the time-value-xyz 987 appears
I changed original xml