По сути, узел с пространством имен - это совершенно другое животное , чем узел с другим пространством имен - даже если они имеют одно и то же локальное имя. (Это во многом аналогично тому, как пространства имен работают везде - на самом деле нет простого способа «игнорировать» пространства имен. Подумайте об игнорировании пространств имен при обращении к классам в C #.)
Чистым подходом было бы упомянуть каждое пространство имен, с которым вы можете столкнуться в XSLT, и работать с префиксами, даже если оно кажется повторяющимся.
Не очень чистый способ таков:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:variable name="secondary1" select="document('secondary1.xml')"/>
<xsl:template match="/">
<foo source="1">
<xsl:value-of select="
$secondary1//*[local-name() = 'path']/*[local-name() = 'mytag']
"/>
</foo>
</xsl:template>
</xsl:stylesheet>
Это на самом деле не более приятно для глаз, чем работа с префиксами, оно длиннее и сложнее для чтения, оно неоднозначно и, наконец, что не менее важно, - медленнее, потому что движок должен тестировать предикат на каждый шаг в XPath. Выбирай.