По сути, ваша таблица стилей должна работать независимо от того, находятся ли все элементы в пространстве имен или в пространстве имен BRL.Это странное требование, и идеальным решением было бы сообщить своему поставщику исходных данных, чтобы он был последовательным в использовании пространства имен.
Но если у вас нет такой возможности, у вас есть несколько других.
1) Объявите префикс для пространства имен BRL в вашей таблице стилей и используйте его для сопоставления элементов в этом пространстве имен или без пространства имен:
<xsl:stylesheet ... xmlns:BRL="http://www.max.com/BRL">
...
<xsl:template match="lhs | BRL:lhs">
...
2) Сделайте все свои совпадения и выберите, используя local-name ():
<xsl:template match="*[local-name()='lhs']">...
...
(Тьфу!)
3) В XSLT 2.0 вы можетеиспользуйте подстановочный знак для пространств имен:
<xsl:template match="*:lhs">
...
<xsl:when test="*:field/*:fieldName != ''">
Но, опять же, все эти три работают вокруг проблема в исходных данных .Они компенсируют того, кто неправильно использует пространства имен, и, таким образом, позволяют ему продолжать делать то же самое.Если в схеме указано, что элементы входного документа должны находиться в пространстве имен "http://www.max.com/BRL"", то вы должны предположить, что они находятся в этом пространстве имен (независимо от того, является ли это пространство имен по умолчанию несущественным для вас), поэтому вы должны всегда использовать префикс пространства имен при сопоставлении или выборе этих элементов с помощью XPath.