Это преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<my:doc2>
<list2>
<value>1</value>
<value>2</value>
</list2>
</my:doc2>
<xsl:variable name="vDoc2"
select="document('')/*/my:doc2/*"/>
<xsl:template match="/*/*">
<xsl:value-of select="concat('
 ',.,' ')"/>
<xsl:variable name="vPos" select="position()"/>
<xsl:if test="not(. = $vDoc2/*[position()=$vPos])">
<xsl:text>no </xsl:text>
</xsl:if>
<xsl:text>match</xsl:text>
</xsl:template>
</xsl:stylesheet>
при применении к первому предоставленному документу XML:
<list1>
<value>1</value>
<value>2</value>
<value>3</value>
</list1>
дает желаемый, правильный результат:
1 match
2 match
3 no match
Обновление : то же преобразование, но с двумя разными файлами XML:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pDoc1" select="'/temp/list1.xml'"/>
<xsl:param name="pDoc2" select="'/temp/list2.xml'"/>
<xsl:variable name="vDoc1"
select="document($pDoc1)/*"/>
<xsl:variable name="vDoc2"
select="document($pDoc2)/*"/>
<xsl:template match="/">
<xsl:apply-templates select="$vDoc1/*"/>
</xsl:template>
<xsl:template match="/*/*">
<xsl:value-of select="concat('
 ',.,' ')"/>
<xsl:variable name="vPos" select="position()"/>
<xsl:if test="not(. = $vDoc2/*[position()=$vPos])">
<xsl:text>no </xsl:text>
</xsl:if>
<xsl:text>match</xsl:text>
</xsl:template>
</xsl:stylesheet>
Update2 : OP дополнительно ищет решение, когда более короткие списки элементов для сравнения являются исходным документом XML:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my:my">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<my:doc2>
<list2>
<value>1</value>
<value>2</value>
<value>3</value>
</list2>
</my:doc2>
<xsl:variable name="vDoc1" select="/*"/>
<xsl:variable name="vDoc2"
select="document('')/*/my:doc2/*"/>
<xsl:template match="/">
<xsl:apply-templates select="$vDoc2/*"/>
</xsl:template>
<xsl:template match="value">
<xsl:value-of select="concat('
 ',.,' ')"/>
<xsl:variable name="vPos" select="position()"/>
<xsl:if test="not(. = $vDoc1/*[position()=$vPos])">
<xsl:text>no </xsl:text>
</xsl:if>
<xsl:text>match</xsl:text>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к этому исходному XML-документу :
<list1>
<value>1</value>
<value>2</value>
</list1>
снова желаемый, правильный результат выдается :
1 match
2 match
3 no match
Update3 : теперь третья модификация OP: порядок элементов в двух списках не имеет значения ...
Решение еще проще:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my:my">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<my:doc2>
<list2>
<value>1</value>
<value>2</value>
<value>3</value>
</list2>
</my:doc2>
<xsl:variable name="vDoc1" select="/*"/>
<xsl:variable name="vDoc2"
select="document('')/*/my:doc2/*"/>
<xsl:template match="/">
<xsl:apply-templates select="$vDoc2/*"/>
</xsl:template>
<xsl:template match="value">
<xsl:value-of select="concat('
 ',.,' ')"/>
<xsl:if test="not(. = $vDoc1/*)">
<xsl:text>no </xsl:text>
</xsl:if>
<xsl:text>match</xsl:text>
</xsl:template>
</xsl:stylesheet>