powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Навязчивый атрибут xmlns
7 сообщений из 7, страница 1 из 1
Навязчивый атрибут xmlns
    #34909639
Хал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.
В C++ Builder я распарсиваю XML-файл с помощью DOM-парсера.

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom"/>
</Style>
<Style ss:ID="s29">
</Style>
<Style ss:ID="s30">
<Font x:CharSet="204" x:Family="Swiss" ss:Bold="1"/>
</Style>
</Styles>
<Worksheet ss:Name="LIST1">
<Table ss:ExpandedColumnCount="10" ss:ExpandedRowCount="201" x:FullColumns="1" x:FullRows="1">
<Column ss:AutoFitWidth="0" ss:Width="123.75"/>
</Table>
</Worksheet>
</Workbook>

Затем вставляю свои элементы по стандартному принципу
pRow = doc->createElement(L"Row");
pTAB->appendChild(pRow);
ну и т.п.

НО!!! когда я сохраняю результат в другой файл, у первого же вставленного мной
элемента автоматически генерируется пустой аттрибут xmlns
<Row xmlns="">
Подскажите, как от него избавиться - он очень мешает, так как мне потом надо открыть этот файл в Excel.
Говорят, что xmlns="" отменяет пространство имен по умолчанию, но мне-то этого не надо! А никаких функций для управления пространством имен в C++ Builder найти не могу...
...
Рейтинг: 0 / 0
Навязчивый атрибут xmlns
    #34910192
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХалГоворят, что xmlns="" отменяет пространство имен по умолчанию,
Он не отменяет, он описывает.
ХалНО!!! когда я сохраняю результат в другой файл, у первого же вставленного мной
элемента автоматически генерируется пустой аттрибут xmlns
<Row xmlns="">
Тут можно заметить. Если xml по структуре не верный, то xmlns появится у всех элементов 1-го уровня. Если структура верна - т.е. один родитель, то xmlns появится токо у одного родителя.
Хал
Подскажите, как от него избавиться - он очень мешает, так как мне потом надо открыть этот файл в Excel.
1. А ты уверен что он не откроется?
2. как вариант... знаешь почему оно появляется? Когда обрабатываешь какой то документ в котором есть xmlns а в xsl они не описаны - они наследуются в выходной документ. Вывод -> надо его описать в xsl, или можешь попытаться добавить проверку , если атрибут пустой то его не выводить...
щас будут ругаться знатаки , скажут xmlns не является атрибутом :)
В общем камень брошен, положди ответов maXmo и TiG'a
...
Рейтинг: 0 / 0
Навязчивый атрибут xmlns
    #34910246
Хал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Порядок такой:
1) Парсю имеющийся шаблон (см первое сообщение) DOM-парсером из С++ Builder - получаю DOM-документ
2) Добавляю по надобности элементы
3) Записываю в обратно в файл (другой, но это вроде неважно) также в виде XML
4) Открываю (по-прежнему из приложения С++) в Excel (с помощью CreateOleObject)
И если там есть <Row xmlns=""> (ну или любой другой), то в Excel я получаю пустую табличку.

P.S. Про атрибут это я скорее оговорился :) Но, в общем, сильно строго не судите, я только начинающий...
...
Рейтинг: 0 / 0
Навязчивый атрибут xmlns
    #34912095
Хал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблему решил - спасибо за подсказки!
...
Рейтинг: 0 / 0
Навязчивый атрибут xmlns
    #34912233
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего сделал то?
Расказывай уж
...
Рейтинг: 0 / 0
Навязчивый атрибут xmlns
    #34913272
Хал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я отказался от метода createElement

pRow = doc->createElement(L"Row");

заменив его на createNode

pRow = doc->createNode( Variant("Element"), L"Row", L"urn:schemas-microsoft-com:office:spreadsheet");

Так я указываю пространство имен, в котором создаю элемент, что сняло проблему.
Плюс там еще опечатка у меня была, что несколько замедлило...
(Я создавал ячейку
pRow = doc->createNode( Variant("Element"), L"CELL"...., а не
pRow = doc->createNode( Variant("Element"), L"Cell"..... )
Но это мелочи (когда менял createElement на createNode появилась, зараза).

Главное - про пространство имен.
Правда, почему в Билдере нет соответствующей функции для элемента с заданием пространства имен (типа createElement(w_char* name, w_char* namespaceURI);), непонятно.

MaxMo и Leshiy дали - спасибо. (Я этот вопрос еще в разделе С++ выставил)
...
Рейтинг: 0 / 0
Навязчивый атрибут xmlns
    #34913278
Хал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaxMo и Leshiy подсказку дали - спасибо. (Я этот вопрос еще в разделе С++ выставил)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Навязчивый атрибут xmlns
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]