![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вывести такое (<?xml version="1.0" encoding="windows-1251" ?>
VID © (2006-12-18 19:17:00)var
Doc: IXMLDOMDocument;
begin
Doc := CoDomDocument.create;
Doc.load('c:\test.xml');
вопрос как вывести на экран (наприер ShowMessage) строку наподобие этой:<?xml version="1.0" encoding="windows-1251" ?>, но которая будет соответстовать загруженному файлую
(как ваще называется эта строка?)
Reindeer Moss Eater (2006-12-19 15:41:00) [1]Тебе и говорят, что у тебя оптический обман.
Причина в другом.
VID (2006-12-19 15:33:00) [2]Блин... естесвенно я это знаю. Вот поэтому я и удивлен. Меня как будто не хотят слышать!
Reindeer Moss Eater (2006-12-19 15:30:00) [3]Парсеру глубого по барабану, отформатирован xml документ или он одной строкой представлен.
VID (2006-12-19 14:59:00) [4]Блин я серьезно.. у меня эти два файла. оно так и есть!
Reindeer Moss Eater (2006-12-19 13:51:00) [5]Это оптический обман.
VID (2006-12-19 13:47:00) [6]Я знаю это!
Но ответь тогда, почему так получилось: почему два идентичных по структуре и содержанию файла, один неотформатирован весь в одной строке. другой отформатирован (множество строк. отступы), и тот первый успешно прогружается, а второй - нет ?
Reindeer Moss Eater (2006-12-19 13:10:00) [7]documentElement Property
Contains the rootelement of the document.
<ВотМойДокументЭлемент>
<инет_никакого_вершен_и_энкодинг/>
</ВотМойДокументЭлемент>
Reindeer Moss Eater (2006-12-19 13:05:00) [8]А с чего ты вдруг решил, что строка
<?xml version="1.0" encoding="windows-1251" ?>
это и есть DocumеntElement?
VID (2006-12-19 12:35:00) [9]Спасибо. Ценные сведения.
Но с чего все началось ?
Я написал маленький XML форматтер, которые преобразует форматирует XMLину описанную в одной строке, и приводит её к благообразному виду: с отступами и тд.
Но столкнулся с непонятным для меня явлением: Получающаяся на выходе XML (данные и структура которой один-в-один соответствует исходной) при попытке загрузать её в документ не прогружается. Т.е.:
Doc: IXMLDOMDocument;
Doc.load('result_xml');
и doc.documentElement = nil !
Хотя xml прогрузилась без ошибок и правильно оформлена (за это не беспокойтесь).
Если же в первой строке, результирующего XML файла добавить строку типа
<?xml version="1.0" encoding="windows-1251" ?>, то эта XML отлично прогружается.
Но вся фишка в том, что в ИСХОДНОЙ XML не было такой строки ! И это, однако, не мешало ей спокойно прогружаться в документ и doc.documentElement не был равен nil! Вот в чем тут дело, кто знает ?
Reindeer Moss Eater (2006-12-19 12:16:00) [10]Поймите, никакого c:\test.xml на самом деле может и не существовать.
Пока документ не сериализован на какой-то носитель, строки с указанием енкодинга может вообще не существовать. даже если её создать явно
doc.createProcessingInstruction('xml','version="1.0" encoding="windows-1251"')
Reindeer Moss Eater (2006-12-19 12:14:00) [11]doc.childNodes.item[0].text;
VID (2006-12-19 12:10:00) [12]криво. содержимое Doc может достигать пол-сотни мегабайт. ненужная игра с памятью
Плохиш (2006-12-19 11:05:00) [13]Если [2] не помогает, то
Doc.SaveToXml(s);
SetLenght(s, Pos('>'));
ShowMessage(s);
VID (2006-12-19 10:28:00) [14]Поймите, никакого c:\test.xml на самом деле может и не существовать.
Doc можно заполнить данныим и вручную, создавая в нем элементы и наполняя их аттрибутами. От этого задача не меняется.
VID (2006-12-19 10:24:00) [15]Вы меня пугаете :)
Все что у нас есть это Doc: IXMLDOMDocument. И в него прогружен некий XML. Вот. И нужно из этого документа (вызывав какие-нибудь его методы) получить строку типа
<?xml version="1.0" encoding="windows-1251">
которая, в случае сохранения Doc.Save() была бы первой строкой в сохраненном файле.
MetalFan (2006-12-19 00:35:00) [16]
...
StringList.LoadFromFile(...);
ShowMessage(StringList[0]);
...
или Doc.xml ?
umbra (2006-12-18 20:12:00) [17]это я, пожалуй вспылил :(
umbra (2006-12-18 19:31:00) [18]
ShowMessage(doc.XML[0]);
VID (2006-12-18 19:17:00) [19]Delphi7, winxp