Текстовая строка (!DOCTYPE) в DOMDocument

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Rojohn » 09.12.2009 (Ср) 15:50

Добрый день!
Проблема в присоединении текстовой строки (комментария) определенного вида к документу DOMDocument, при формировании XML-файла. Необходимо присоединить следующую строку:
Код: Выделить всё
<!DOCTYPE EXPORT SYSTEM "REQUEST_IMPORT.dtd">


С помощью createComment формируется комментарий вида:
Код: Выделить всё
<!--DOCTYPE EXPORT SYSTEM "REQUEST_IMPORT.dtd"-->


Символы "--" кроме как через прямое редактирование полученного XML как текстового файла, убрать не получается. Может кто-нибудь знает способ?

И ещё один вопрос: Как сохранить XML-файл структурно (в виде дерева), а не одной строкой? Символы переноса строки в IXMLDOM существуют или как-то иначе?
Спасибо!

P.s.: если не по теме - прошу прощения, просьба перенести в тему XML.
Последний раз редактировалось Rojohn 10.12.2009 (Чт) 18:10, всего редактировалось 3 раз(а).
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Формат комментария в DOMDocument

Сообщение Хакер » 09.12.2009 (Ср) 15:57

Доктайп это не коммент. Какой смысл использовать createComment?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Формат комментария в DOMDocument

Сообщение Денис » 09.12.2009 (Ср) 15:59

Извините за оффтоп, но!
Как после такого топика не увериться в существовании информационного поля?
Буквально пару дней назад еще один начал работать с XML и у него тоже все в одну строку писалось и он тоже полез сюда за советом.
А символы из комментариев убирать не рекомендую пока внятно не объясни... те, зачем это понадобилось.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Формат комментария в DOMDocument

Сообщение Rojohn » 09.12.2009 (Ср) 16:01

А каким способом лучше добавить строку такого вида? Это не должен быть коммент - просто не понимаю, как правильно добавить...
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Формат комментария в DOMDocument

Сообщение ANDLL » 09.12.2009 (Ср) 16:05

[Хакер] :: Оскорбление участников вырезано. Предупреждение Ну при чем тут комментарий? Это notation.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Формат комментария в DOMDocument

Сообщение Rojohn » 09.12.2009 (Ср) 16:17

Все объекты перебрал - ничего не подходит! Если это node, то должно быть имя, а имя не переваривает "!". Поэтому пока вижу только один способ: вырезать "--" из текстового файла. Или тип документа можно как-то грамотно прописать?
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Текстовая строка в DOMDocument

Сообщение Antonariy » 09.12.2009 (Ср) 16:44

CreateNode с параметром NODE_DOCUMENT_TYPE.
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Текстовая строка в DOMDocument

Сообщение Rojohn » 09.12.2009 (Ср) 17:27

Спасибо! Мысль хорошая - осталось правильно реализовать:
NODE_NOTATION (12) - DTD нотация
Какой синтаксис формирования нода? Попытался сделать:
Код: Выделить всё
Dim xmlDoc As DOMDocument
Dim pi As IXMLDOMProcessingInstruction
Dim RD As IXMLDOMElement
Set xmlDoc = New DOMDocument
    Set pi = xmlDoc.createProcessingInstruction("xml", "version='1.0' encoding='windows-1251'")
    xmlDoc.appendChild pi
    Set RD = xmlDoc.createNode(12, "DOCTYPE EXPORT SYSTEM " & Chr(34) & "REQUEST_IMPORT.dtd" & Chr(34), "")
    xmlDoc.appendChild RD
...
xmlDoc.Save (OutFile.Text)

Пишет ошибку:
Код: Выделить всё
This operation can not be performed with a Node of type NOTATION


Вот ещё:
NODE_NOTATION(12) This node represents a notation in the document type declaration.

You cannot create nodes of type NODE_DOCUMENT, NODE_DOCUMENT_TYPE, NODE_ENTITY or NODE_NOTATION.


Может ноды такого типа создавать нельзя?
Последний раз редактировалось Rojohn 10.12.2009 (Чт) 18:11, всего редактировалось 1 раз.
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Текстовая строка (нотация) в DOMDocument

Сообщение Antonariy » 10.12.2009 (Чт) 12:18

Походу нельзя. Я-то инфу взял из кнопки F2, а не MSDN, там про такие нюансы не написано.
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Текстовая строка (нотация) в DOMDocument

Сообщение Rojohn » 10.12.2009 (Чт) 12:26

Тогда, наверное, эту строку надо добавлять как текст :?:
И что насчёт второго вопроса о древесном виде сохраненного файла? Кто-нить что-нить знает :?:
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Antonariy » 11.12.2009 (Пт) 2:20

Rojohn писал(а):Тогда, наверное, эту строку надо добавлять как текст :?:
Кэп снимает шляпу :)

Rojohn писал(а):И что насчёт второго вопроса о древесном виде сохраненного файла? Кто-нить что-нить знает :?:
На визуальное форматирование xml-текста библиотеке MSXML начхать целиком и полностью. Она не для этого предназначена.
Но отформатировать этот текст лесенкой самостоятельно — плевое дело.
1) Заменить "><" на ">" & vbCrLf & "<"
2) Объявить счетчик и пройтись в цикле по получившимся строкам
3) При наличии в начале строки "<" счетчик увеличивать, при наличии "</" — уменьшать.
4) Заменять в текущей строке "<" на Space(счетчик * (кол-во символов в табуляции)) & "<"
5) End
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Rojohn » 11.12.2009 (Пт) 9:32

Antonariy писал(а):
Rojohn писал(а):Тогда, наверное, эту строку надо добавлять как текст :?:
Кэп снимает шляпу :)


Проблема в том, что текстом можно добавлять в текстовый файл, либо как какой-то текстовый элемент DOCDocument. Первый случай сделаю сам, но это лишний гимор. А как сделать второй пока не знаю! Перед каким способом Кэп снимал шляпу?

Antonariy писал(а):
Rojohn писал(а):И что насчёт второго вопроса о древесном виде сохраненного файла? Кто-нить что-нить знает :?:
На визуальное форматирование xml-текста библиотеке MSXML начхать целиком и полностью. Она не для этого предназначена.
Но отформатировать этот текст лесенкой самостоятельно — плевое дело.
1) Заменить "><" на ">" & vbCrLf & "<"
2) Объявить счетчик и пройтись в цикле по получившимся строкам
3) При наличии в начале строки "<" счетчик увеличивать, при наличии "</" — уменьшать.
4) Заменять в текущей строке "<" на Space(счетчик * (кол-во символов в табуляции)) & "<"
5) End


Спасибо, конечно, за такой подробный алгоритм! Но до него я бы и сам додумался, только вот как бы такая куча дополнительных операций не увеличила время выгрузки в XML! Может тогда проще было бы вместо DOMDocument сразу записывать всё в текстовый файл вручную?
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Antonariy » 11.12.2009 (Пт) 12:18

Перед каким способом Кэп снимал шляпу?
Именно перед этим.
Лично я всегда создаю документ из строки, в которой уже есть и нотация и процессинговая инструкция, если надо, и корневой элемент.

Любая дополнительная операция увеличит время. Способ формирования XML зависит от того, как и с какими целями вы его используете. Иногда лучше через объектную модель, иногда в виде текста — зависит от ваших алгоритмов.
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Rojohn » 11.12.2009 (Пт) 12:39

Antonariy писал(а):
Перед каким способом Кэп снимал шляпу?
Именно перед этим.
Лично я всегда создаю документ из строки, в которой уже есть и нотация и процессинговая инструкция, если надо, и корневой элемент. .

Это как? Изменяя полученный через объектную модель файл или дополняя созданный ранее текстовый файл не используя объектную модель? Ведь, насколько я понимаю, до сохранения файла через .Save кроме стандартных элементов объектной модели ничего добавить нельзя?

Antonariy писал(а):Любая дополнительная операция увеличит время. Способ формирования XML зависит от того, как и с какими целями вы его используете. Иногда лучше через объектную модель, иногда в виде текста — зависит от ваших алгоритмов.

Мои алгоритмы достаточно просты: определенные данные из базы MSAccess, определенными SQL-запросами выгружаются в теги XML-подобного формата. Вопрос в другом: какой из двух способов быстрей работает при одинаковом раскладе (особенно на большом массиве данных)? Т.е. есть ли выигрыш в том, чтобы вместо простого текстового файла создавать файл через объектную модель и потом ещё и редактировать, добавляя строки и расставляя символы перехода строки :?:
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Rojohn » 11.12.2009 (Пт) 16:40

И вообще, какой смысл в этом DOMDocument, если им нельзя сформировать одну из основных строчек файла XML? Думаю просто надо найти как это сделать, должна формироваться!
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Antonariy » 11.12.2009 (Пт) 16:41

Rojohn писал(а):Это как?
И вообще, какой смысл в этом DOMDocument, если им нельзя сформировать одну из основных строчек файла XML?

Код: Выделить всё
Set doc = New DOMDocument
doc.loadXML "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?><root></root>"
А дальше объектной моделью. Не обламываюсь, знаете ли.

Rojohn писал(а):Т.е. есть ли выигрыш в том, чтобы вместо простого текстового файла создавать файл через объектную модель и потом ещё и редактировать, добавляя строки и расставляя символы перехода строки :?:
Если писать сразу в файл со всем форматированием да еще с помощью апи, то это будет самое оно.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Antonariy » 11.12.2009 (Пт) 16:44

основных строчек
Это строчка опциональная. Основная всего одна — <root></root>.
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Rojohn » 11.12.2009 (Пт) 17:08

1.Чего-то не срабатывает! Пишу конструкцию:
Код: Выделить всё
Set xmlDoc = New DOMDocument
      xmlDoc.loadXML "<?xml version=""1.0"" encoding=""windows-1251""?><!DOCTYPE EXPORT SYSTEM ""REQUEST_IMPORT.dtd"">"
      Set parent = xmlDoc.createElement("EXPORT")
      xmlDoc.appendChild parent
      ...
      xmlDoc.Save (OutFile.Text)

Выдаёт без начальных строчек...

2. А с помощью API - это как? Примерчик есть?
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение alibek » 11.12.2009 (Пт) 17:19

А корень где?
Lasciate ogni speranza, voi ch'entrate.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Rojohn » 11.12.2009 (Пт) 17:28

alibek писал(а):А корень где?


Вот:
Код: Выделить всё
Set parent = xmlDoc.createElement("EXPORT")
      xmlDoc.appendChild parent


Мне же нужна переменная, к которой я буду все ноды привязывать...

Есть, конечно, вариант:
Код: Выделить всё
Set xmlDoc = New DOMDocument
    xmlDoc.loadXML "<?xml version=""1.0"" encoding=""windows-1251""?><!DOCTYPE EXPORT SYSTEM ""REQUEST_IMPORT.dtd""><EXPORT></EXPORT>"
   что-то типо:
   Set new1 = xmlDoc.createElement("HEADER")
   xmlDoc.selectSingleNode("EXPORT").appendChild new1 'Не знаю как правильно написать эту строчку...
   ...
   xmlDoc.Save (OutFile.Text)
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Antonariy » 11.12.2009 (Пт) 21:01

А с помощью API - это как? Примерчик есть?
CreateFile, примерчика нет, никогда не пользовался.
Не знаю как правильно написать эту строчку...
xmlDoc.documentElement
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Хакер » 11.12.2009 (Пт) 21:10

Antonariy писал(а):CreateFile, ... никогда не пользовался.

:shock:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Antonariy » 11.12.2009 (Пт) 21:55

Что тебя удивило?
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Хакер » 11.12.2009 (Пт) 21:59

То что ты ни разу не использовал эту функцию и удивило. Функция настолько базовая.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Antonariy » 11.12.2009 (Пт) 22:07

Ну как-то Open и fso для файловых операций хватало. Я не делал систем, где это было бы узким местом.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Хакер » 11.12.2009 (Пт) 22:14

Эта функция не исчерпывается файловыми операциями.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Rojohn » 14.12.2009 (Пн) 11:46

Antonariy писал(а):xmlDoc.documentElement


Почти получилось, только теперь ругается на то, что не может найти инструкцию:
Код: Выделить всё
REQUEST_IMPORT.dtd


А можно без приложения файла .dtd сделать :?: Просто текстом инструкцию написать. Т.к. мне для выгрузки она не нужна, а нужна только для загрузки и не мне.
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Antonariy » 14.12.2009 (Пн) 11:48

Понятия не имею. В такие дебри XML я еще не залезал.
Лучший способ понять что-то самому — объяснить это другому.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Re: Текстовая строка (!DOCTYPE) в DOMDocument

Сообщение Rojohn » 14.12.2009 (Пн) 12:32

Может кто-нибудь ещё знает? Хакер, например...
Надо-то всего лишь текстовую строку с тегом <!DOCTYPE ...> добавить безболезненно...

Вот скопировал файл .dtd - ошибку не выдаёт, но ничего в файл тоже не пишет. Короче, я так понял, что эта инструкция должна использоваться определённым образом с приложенным файлом сценария. А как текст её можно добавить только "ручками" после создания файла. Если кто-нибудь знает другой способ - будьте так любезны, поделитесь...
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList