Пространство имен и XSL процессор
От: ctalker  
Дата: 04.09.07 12:19
Оценка:
Здравствуйте!

Такая проблема.
Использую 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 не надо – хотелось бы разобраться именно с описанной ситуацией)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.