XML-форумы | |
Обсуждение XML и связанных с ним технологий |
Автор | Сообщение | |
---|---|---|
FAV Гость |
[12831]
Вт Авг 12, 2008 10:55
Как при прикопировании узла избежать добавления аттрибута xmlns?
При копирование узла добавляется аттрибут xmlns="...&qu Есть xml-файл: <?xml version="1.0" encoding="UTF-8"?> <ns1:mse_invoice_usd_out xmlns:ns1="urn:..."> <RETURN> <item> <TYPE>I</TYPE> <NUMBER>000</NUMBER> </item> </RETURN> </ns1:mse_invoice_usd_out> Применяю к нему xsl-преобразование: <xsl:template match="item"> <xsl:copy/> </xsl:template> Получаю: <item xmlns:ns1="urn:sng.uit.obr.sd.exchange.sex" /> |
|
Fireball Наставник Зарегистрирован: 26.02.2008 Сообщения: 282 |
[12832]
Вт Авг 12, 2008 10:59
http://www.citforum.ru/internet/xslt/xslt07.shtml
Если не ошибаюсь, то должно помочь exclude-result-prefixes . |
|
SuSanin Аспирант Зарегистрирован: 26.02.2007 Сообщения: 167 Откуда: Ижевск |
[12833]
Вт Авг 12, 2008 13:56
при обработки xml( если в нем упоминаются ns) из него все необъявленные в xsl пространства имен (ns = namespace) перекачуют в выходной документ.
Решение - объявить их в xsl. Использовать не обязательно. тогда в выходном файле их не будет. Что в конкретном примере мы и наблюдаем. в xml есть строка : Код: <ns1:mse_invoice_usd_out xmlns:ns1="urn:..."> а в xsl про xmlns:ns1 нислова. вот и результат. |
|
Гость |
[12834]
Вт Авг 12, 2008 16:13
Чертовски извиняюсь, подскажите, пожалуйста, как это сделать?
И где? В <xsl:stylesheet>? |
|
Гость |
[12835]
Вт Авг 12, 2008 16:39
Воспользовался обоими советами и ничего не помогло. Может я, что-то не правильно понял?
Вот окончательный код XSL: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:ns1="urn:sng.uit.obr.sd.exchange.sex" xmlns:xsl="http://.../1999/XSL/Transform" exclude-result-prefixes="ns1" version="2.0" > <xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="no" indent="yes"/> <xsl:template match="item/*"> <xsl:copy copy-namespaces="no" xsl:exclude-result-prefixes="ns1" /> </xsl:template> </xsl:stylesheet> |
|
Гость |
[12836]
Вт Авг 12, 2008 16:43
А в результате имею выходной XML c xmlns!!!
Код:
|
|
SuSanin Аспирант Зарегистрирован: 26.02.2007 Сообщения: 167 Откуда: Ижевск |
[12837]
Вт Авг 12, 2008 21:38
че то непонятно.
1. давай приведи что есть, как обрабатываешь , что получаешь ,а что хочешь получить 2. ну вот пример: xml из твоего 1-го примера, xsl будет выглядеть так: Код:
результат малость конечно не такой как хотелось бы видеть, но все же : Код:
|
|
Гость |
[12840]
Ср Авг 13, 2008 07:37
Ну, вот примерно так и хочу видеть выходной XML, только без гадского xmlns
и с использованием <xsl:copy>, т.к. мне нужно еще добавить элементов в узел <item> и переименовать его в <ИмяМоейТаблицы> |
|
AV Новичок Зарегистрирован: 13.08.2008 Сообщения: 3 |
[12841]
Ср Авг 13, 2008 08:17
Еще раз все вместе. Входной xml:
Код:
Преобразование XSL: Код:
В выходные данные лезет пространство имен xmlns:ns1="urn:sng.uit.obr.sd.exchange.sex". Неужели по-красивому от него никак не избавиться?????!!!!! Код:
|
|
Fireball Наставник Зарегистрирован: 26.02.2008 Сообщения: 282 |
[12845]
Ср Авг 13, 2008 13:32
Код: <?xml version="1.0" encoding="UTF-8"?>
Префиксы остаются только на корневой ноде. Второй шаблон копирует все ноды по дефолту. <table> заменить на свой <xsl:element>. Лень просто было с передачей параметров париться внутрь XSL. Если надо и на корневой убрать, то будем думать дальше PS. И не пользуйтесь copy-of. Его прекрасно и более функционально заменяет apply-templates. Хотя везде есть исключения. |
|
Гость |
[12847]
Ср Авг 13, 2008 14:58
КРУТО!!! Спасибо огромное!!! Префикс на корневом я переживу...
P.S Только я не понимаю в чем разница? Почему в одном случае добавляет в др. - нет? Или код, который я написал - не корректный, так никто не пишет?(2-й день как xsl пользую) |
|
Fireball Наставник Зарегистрирован: 26.02.2008 Сообщения: 282 |
[12848]
Ср Авг 13, 2008 15:08
Мне почему-то кажется, что разница в copy-of. Надо поэксперементировать.
А вообще, код не очень изначально был написан, поэтому я написал по своему и как мне лучше показалось. |
Страница 1 из 1 |