Функция document () здесь используется для доступа к самому документу XSLT и извлечения содержимого переменной xsl :. В этом случае вообще нет необходимости использовать функцию document ().
Поскольку вы используете Microsoft.Net здесь, вы должны иметь доступ к функциям расширения msxml для XSLT. Действительно, соответствующее пространство имен для msxml уже определено в документе XSLT
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
Это означает, что вы сможете использовать функцию набора узлов для прямого доступа к узлам в переменной State_Code_Tran напрямую. Для этого попробуйте изменить существующую функцию xsl: выберите следующим образом:
<xsl:choose>
<xsl:when test="msxsl:node-set($State_Code_Trn)/State[@In=$test_val]">
<xsl:value-of select="msxsl:node-set($State_Code_Trn)/State[@In=$test_val]/@Out"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>Other</xsl:text>
</xsl:otherwise>
</xsl:choose>
Это должно привести к следующему выводу
<root>
<test_node>CA</test_node>
<test_node>CA</test_node>
<test_node>Other</test_node>
<test_node>TX</test_node>
<test_node>TX</test_node>
<test_node>Other</test_node>
<test_node>Other</test_node>
</root>
(Обратите внимание, что перед одним из «CA» в исходном XML у вас есть пробел, поэтому он выглядит как «Other». Вы можете добавить некоторую функцию обрезки, чтобы справиться с этим.