записываемый/читаемый файл — источник
файл куда записывают/откуда читают — приемник
На данный момент у меня есть два варианта решения:
1. загрузить файл источник в XMLDocument и уже добавлять его пробегаясь по всем XMLNode в файл приемник, предварительно созданный тоже как XMLDocument
2. формировать файл приемник, используя не XMLDocument, а как простой текстовый файл и записывать файл источник тоже как простой текстовый файл
Но эти варианты не совсем меня устраивают:
1. недостаточно быстрый при больших размерах файлов источников
2. нет универсальности в формировании xml, хотелось бы использовать стандартные интерфейсы для работы с xml
Re: Как записать/прочитать XML файл в тэг другого XML файла?
to Lloyd
Да я бы вообще и XML не использовал и вообще ничего не делал бы, а валялся бы на пляже с девочками и т.п.
Однако форум не об этом. Нет ответа по существу — не засоряй топик.
Re[3]: Как записать/прочитать XML файл в тэг другого XML фай
Здравствуйте, surovi, Вы писали:
S>to Lloyd S>Понимаешь, смысл в том, что вложенные xml это Recordset-ы, а они уже могут быть и маленькими и большими. S>И от этого никуда не денешься.
Тогда смирись с той производительностью, которую предлагает dom. Или читай/пиши ручками через XmlReader/XmlWriter.
Re[3]: Как записать/прочитать XML файл в тэг другого XML фай
Здравствуйте, surovi, Вы писали:
S>to Lloyd S>Да я бы вообще и XML не использовал и вообще ничего не делал бы, а валялся бы на пляже с девочками и т.п. S>Однако форум не об этом. Нет ответа по существу — не засоряй топик.
Хорошо, я приму твой комментарий про девочек в качестве образца ответа по существу.
Re[4]: Как записать/прочитать XML файл в тэг другого XML фай
Здравствуйте, surovi, Вы писали:
S>записываемый/читаемый файл — источник S>файл куда записывают/откуда читают — приемник
S>На данный момент у меня есть два варианта решения: S>1. загрузить файл источник в XMLDocument и уже добавлять его пробегаясь по всем XMLNode в файл приемник, предварительно созданный тоже как XMLDocument S>2. формировать файл приемник, используя не XMLDocument, а как простой текстовый файл и записывать файл источник тоже как простой текстовый файл
S>Но эти варианты не совсем меня устраивают: S>1. недостаточно быстрый при больших размерах файлов источников S>2. нет универсальности в формировании xml, хотелось бы использовать стандартные интерфейсы для работы с xml
1. А зачем пробегаться? Добавить documentElement источника в XMLNode приемника. Производительность не тестировал
2. Можно воспользоваться секцией CDATA (запихать источник туда). Производительность также не тестировал.
Re: Как записать/прочитать XML файл в тэг другого XML файла?
Здравствуйте, surovi, Вы писали:
S>записываемый/читаемый файл — источник S>файл куда записывают/откуда читают — приемник
S>На данный момент у меня есть два варианта решения: S>1. загрузить файл источник в XMLDocument и уже добавлять его пробегаясь по всем XMLNode в файл приемник, предварительно созданный тоже как XMLDocument S>2. формировать файл приемник, используя не XMLDocument, а как простой текстовый файл и записывать файл источник тоже как простой текстовый файл
S>Но эти варианты не совсем меня устраивают: S>1. недостаточно быстрый при больших размерах файлов источников S>2. нет универсальности в формировании xml, хотелось бы использовать стандартные интерфейсы для работы с xml
surovi wrote:
> записываемый/читаемый файл — источник > файл куда записывают/откуда читают — приемник
> На данный момент у меня есть два варианта решения: > 1. загрузить файл источник в XMLDocument и уже добавлять его пробегаясь > по всем XMLNode в файл приемник, предварительно созданный тоже как > XMLDocument > 2. формировать файл приемник, используя не XMLDocument, а как простой > текстовый файл и записывать файл источник тоже как простой текстовый файл > > Но эти варианты не совсем меня устраивают: > 1. недостаточно быстрый при больших размерах файлов источников > 2. нет универсальности в формировании xml, хотелось бы использовать > стандартные интерфейсы для работы с xml
SAX чем не устраивает?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Как записать/прочитать XML файл в тэг другого XML фай
to dkart dkart> 1. А зачем пробегаться? Добавить documentElement источника в XMLNode приемника. Производительность не тестировал
А можешь немного подробнее об этом, это вроде то, что я ищу.
dkart> 2. Можно воспользоваться секцией CDATA (запихать источник туда). Производительность также не тестировал.
Пробовал. Проблема в том, что вложенный xml получен из Recordset (MS Access 2000) и там есть MEMO поле, в котором, к сожалению, содержатся картинки, причем записанные в бинарном виде без перевода в текстовый, т.е. содержатся непреемлемые для текста символы.
Так вот когда записываю, то данные после первого такого символа обрубаются.
А если записывать в NodeValue, то ругается на то, что содержатся некорректные символы.
to V.Petrovski
А если без .NET?
to WinterMute
Мне нужно, чтобы все было в одном xml файле.
to kan_izh
Что конкретно ты имеешь в виду в SAX?
Re[3]: Как записать/прочитать XML файл в тэг другого XML фай
Здравствуйте, surovi, Вы писали:
S>to WinterMute S>Мне нужно, чтобы все было в одном xml файле.
По идее, процессор должен вставить содержимое файла как "текст замены", т.е. прочитав repicient.xml, ты получишь DOM содержащий узлы файла source.xml. Или это не то?
Re[4]: Как записать/прочитать XML файл в тэг другого XML фай
WM>По идее, процессор должен вставить содержимое файла как "текст замены", т.е. прочитав repicient.xml, ты получишь DOM содержащий узлы файла source.xml. Или это не то?
Если в итоге получится объединенный xml, то вроде бы то.
Приведи пожалуйста небольшой пример кода как записать ссылку в xml.
Re[5]: Как записать/прочитать XML файл в тэг другого XML фай
Здравствуйте, surovi, Вы писали:
WM>>По идее, процессор должен вставить содержимое файла как "текст замены", т.е. прочитав repicient.xml, ты получишь DOM содержащий узлы файла source.xml. Или это не то? S>Если в итоге получится объединенный xml, то вроде бы то. S>Приведи пожалуйста небольшой пример кода как записать ссылку в xml.
Получится, разумеется, не "xml-файл", а его DOM, если это устраивает, то тот пример, который я приводил ранее, но с некоторыми оговорками:
<!-- source.xml -->
<?xml version="1.0" encoding="utf-8"?>
<!-- Этот файл не обязательно должен содержать только один корневой элемент,
но обязательно должен содержать пролог с указанием кодировки -->
Any other content
<some>
<b>Мама мыла раму</b>
</some>
<!-- repicient -->
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE some [
<!ENTITY ref SYSTEM "source.xml" >
]>
<some>
&ref;
</some>
-- Такую конструкцию ест IE, но тут есть несколько нюансов: т.к. файлы ты получаешь из БД, то имя "source.xml" не будет найдено процессором, как вариант обхода проблемы -- написать свой сервер (или поставить, например, Apache) и дать некоторым ресурсам из БД адреса. В этом случае адрес включаемой страницы будет записыватся как-то так: "http://localhost/source.xml".
Re[5]: Как записать/прочитать XML файл в тэг другого XML фай
Здравствуйте, surovi, Вы писали:
WM>>По идее, процессор должен вставить содержимое файла как "текст замены", т.е. прочитав repicient.xml, ты получишь DOM содержащий узлы файла source.xml. Или это не то? S>Если в итоге получится объединенный xml, то вроде бы то. S>Приведи пожалуйста небольшой пример кода как записать ссылку в xml.
Ссылка в XML записывается: &-имя-ссылки-; Или ты что-то другое имел в виду?
Re[6]: Как записать/прочитать XML файл в тэг другого XML фай
Спасибо Вам всем за помощь, все оказалось на много проще и на много сложнее.
Код на Delphi
var
xml: IXMLDocument;
subxml: IXMLDocument;
iNode: IXMLNode;
SubNode: IXMLNode;
begin
xml := TXMLDocument.Create(nil) as IXMLDocument;
xml.Active := True;
xml.Version := '1.0';
xml.Encoding := 'UTF-8';
iNode := xml.AddChild('DATABASE');
SubNode := iNode.AddChild('TableName');
qry.SQL.Add('SELECT * FROM TableName');
qry.SaveToFile('TableName.xml', pfXML); // аналогично команде ADODBRecordset.Save('TableName.xml', adPersistXML);
//qry.LoadFromFile('TableName.xml'); // Ошибка
subxml := TXMLDocument.Create(nil) as IXMLDocument;
subxml.Active := True;
subxml.Version := '1.0';
subxml.Encoding := 'UTF-8';
subxml.LoadFromFile('TableName.xml');
SubNode.ChildNodes.Add(subxml.DocumentElement);// Вот то, что искал!
xml.SaveToFile('Database.xml');
Так вот, проблема в том, что ADODB.Recordset сохраняет нормально, а вот загрузить, то что сохранил не может, т.к.
в таблице есть MEMO поле (MS Access 2000), в котором хранятся картинки, причем не в закодированном виде (bin.hex или bin.base64),
а просто двоичные данные записаны в MEMO, т.е. с некорректными для текста символами — из-за них он и не может загрузить.
В xml тип для этих полей установлен dt:type='string'.
Скажите пожалуйста, что с этим делать?
Re[7]: Как записать/прочитать XML файл в тэг другого XML фай
Возникла необходимость переделать написанный код используя DOM, т.к. ADO позволяет сохранять Recordset напрямую в IXMLDOMDocument без использования промежуточного xml файла.
Но при добавлении вложенного документа возникает ошибка:
"This operation can not be performed with a Node of type ELEMENT."
Каким образом тогда можно добавить вложенный документ?
Здравствуйте, surovi, Вы писали:
S>Возникла необходимость переделать написанный код используя DOM, т.к. ADO позволяет сохранять Recordset напрямую в IXMLDOMDocument без использования промежуточного xml файла. S>Но при добавлении вложенного документа возникает ошибка: S>"This operation can not be performed with a Node of type ELEMENT."
S>Каким образом тогда можно добавить вложенный документ?
subxmldom.documentElement.firstChild() не проходит?
S>
surovi wrote:
> to WinterMute > subxmldom.documentElement.firstChild — аналогичная ошибка > > ещ Lloyd > importNode — возможно решило бы проблему, но это уже IXMLDOMDocument3 > Implemented in MSXML 5.0 > который не идет со всеми Windows по умолчанию.
Значит вешаться и реализовывать importNode вручную.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[10]: Как записать/прочитать XML файл в тэг другого XML фа
surovi wrote:
> to WinterMute > subxmldom.documentElement.firstChild — аналогичная ошибка > > ещ Lloyd > importNode — возможно решило бы проблему, но это уже IXMLDOMDocument3 > Implemented in MSXML 5.0 > который не идет со всеми Windows по умолчанию.
Или выкинуть нафик эту бяку и взять другую либу, хоть тот же libxml2, он довольно маленький, если скомпилить по минимуму
(200-300 кб максимум, имхо).
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[10]: Как записать/прочитать XML файл в тэг другого XML фа
Здравствуйте, surovi, Вы писали:
S>importNode — возможно решило бы проблему, но это уже IXMLDOMDocument3 Implemented in MSXML 5.0 S>который не идет со всеми Windows по умолчанию.