Здравствуйте!
Такая проблема.
Использую XSL процессор (Sablotron – но здесь это не важно).
На вход такая XML:
<?xml version="1.0" encoding="utf-8"?>
<test>
<a>TEST</a>
</test>
И такое преобразование:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" version="1.0"/>
<xsl:template match="/">
<b><xsl:value-of select="/test/a"/></b>
</xsl:template>
</xsl:stylesheet>
Это нормально работает и на выходе получаем:
<b>TEST</b>
Немного изменяем входную XML – добавляем пространство имен:
<?xml version="1.0" encoding="utf-8"?>
<test xmlns=”http://test.ru”>
<a>TEST</a>
</test>
XSL файл прежний – на выходе – пусто.
Не получается обратиться по пути "/test/a" – этот путь получается неверным.
Вопрос. Как быть в этом случае, какой будет правильный путь?
Единственное, что смог придумать – перебор всех элементов из XML с помощью for-each и нахождение нужного путем сравнения <xsl:if test="name() = 'a'">.
Думаю, что это некорректный способ и существует более изящное решение.
Кстати, если добавить префикс <test xmlns:pref=”
http://test.ru”> — то все нормально работает.
Поясните, пожалуйста.
(Предлагать изменение входного XML не надо – хотелось бы разобраться именно с описанной ситуацией)