|
|
|
Навязчивый атрибут xmlns
|
|||
|---|---|---|---|
|
#18+
Привет всем. В 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 найти не могу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2007, 11:26 |
|
||
|
Навязчивый атрибут xmlns
|
|||
|---|---|---|---|
|
#18+
ХалГоворят, что xmlns="" отменяет пространство имен по умолчанию, Он не отменяет, он описывает. ХалНО!!! когда я сохраняю результат в другой файл, у первого же вставленного мной элемента автоматически генерируется пустой аттрибут xmlns <Row xmlns=""> Тут можно заметить. Если xml по структуре не верный, то xmlns появится у всех элементов 1-го уровня. Если структура верна - т.е. один родитель, то xmlns появится токо у одного родителя. Хал Подскажите, как от него избавиться - он очень мешает, так как мне потом надо открыть этот файл в Excel. 1. А ты уверен что он не откроется? 2. как вариант... знаешь почему оно появляется? Когда обрабатываешь какой то документ в котором есть xmlns а в xsl они не описаны - они наследуются в выходной документ. Вывод -> надо его описать в xsl, или можешь попытаться добавить проверку , если атрибут пустой то его не выводить... щас будут ругаться знатаки , скажут xmlns не является атрибутом :) В общем камень брошен, положди ответов maXmo и TiG'a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2007, 13:31 |
|
||
|
Навязчивый атрибут xmlns
|
|||
|---|---|---|---|
|
#18+
Порядок такой: 1) Парсю имеющийся шаблон (см первое сообщение) DOM-парсером из С++ Builder - получаю DOM-документ 2) Добавляю по надобности элементы 3) Записываю в обратно в файл (другой, но это вроде неважно) также в виде XML 4) Открываю (по-прежнему из приложения С++) в Excel (с помощью CreateOleObject) И если там есть <Row xmlns=""> (ну или любой другой), то в Excel я получаю пустую табличку. P.S. Про атрибут это я скорее оговорился :) Но, в общем, сильно строго не судите, я только начинающий... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2007, 13:43 |
|
||
|
Навязчивый атрибут xmlns
|
|||
|---|---|---|---|
|
#18+
Проблему решил - спасибо за подсказки! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2007, 10:07 |
|
||
|
Навязчивый атрибут xmlns
|
|||
|---|---|---|---|
|
#18+
Чего сделал то? Расказывай уж ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2007, 10:41 |
|
||
|
Навязчивый атрибут xmlns
|
|||
|---|---|---|---|
|
#18+
Я отказался от метода 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 дали - спасибо. (Я этот вопрос еще в разделе С++ выставил) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2007, 14:30 |
|
||
|
|

start [/forum/topic.php?fid=14&msg=34912095&tid=1334105]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 355ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...