| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > XML, XSL > xslt & namespace |
| Автор: hug 16.5.2008, 10:24 | ||||
есть xml:
Пишу xslt:
namespace различные и xslt transform не идет Если из исхондого xml убираю xmlns="http://tourml.ru/products/2004-04-19" все идет нормально, но удалять ns неправильно. Подскажите пожалуйста как разрулить? |
| Автор: Muran 16.5.2008, 11:05 | ||
| еднственное, что мне удалось сделать - это в xsl обявить такой же namespace в определении стайлщита xmlns:ns="http://www.opengis.net/wms" затем во всех match дописываю ns типа
|
| Автор: JVM 16.5.2008, 11:10 |
дело в том, что после того как ты ПЕРЕопределяешь в исходном xml префикс по умолчанию (xmlns="http://tourml.ru/products/2004-04-19") - задаешь новое пространство имен(http://tourml.ru/products/2004-04-19), ты должен использовать это же пространство имен и в xsl. В xsl уже в принципе не важно какой ты установишь префикс для пространства имен, т.к. имеет смысл не сам префикс, а его значение. |
| Автор: hug 16.5.2008, 15:44 | ||||
| Спасибо большое за ответ но странно сделал как вы сказали но трансформ не идет
Output:
Опять же удаляю неймспейс, все ок |
| Автор: Muran 18.5.2008, 11:52 | ||
попробуй так...
|
| Автор: hug 19.5.2008, 08:20 |
| так получилось: Но ns неохота писать:( |
| Автор: Muran 20.5.2008, 15:36 | ||
можно попробовать переименовать нэймспэйс.. задать что ns=#default
я так написал, у меня с ходу не получилось... пока отложил.. попробуй, потом расскажешь результат |
| Автор: JVM 20.5.2008, 22:49 |
| xsl:namespace-alias используется для отображения пространства имен, использующиеся в таблице стилей, в другое пространство имен, используемое в выводе и по этому не решит данной проблемы. Надо признать, что я тоже был не прав и у этой проблемы(насколько я теперь понимаю) нет решения без использования префиксов. Дело в том, что в ражениях XPath игнорируются пространства имен по умолчанию. Т.е. если объявлено пространство имен по умолчанию(xmlns="http://tourml.ru/products/2004-04-19") в XSLT, то это не позволит обратиться к элементам <element> используя выражение XPath //element. В общем надо объявлять префикс (xmlns:pref="http://tourml.ru/products/2004-04-19") и обращаться к <element> используя //pref:element. |
| Автор: DarkLordis 6.9.2010, 13:15 | ||
в общем решается эта проблема вроде (у меня решилась) крайне просто... (целый день думал что за фигня)
а все потому что root-элемент не такой как все |