powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как загрузить XML-строку в XMLFragment или XMLNode?
7 сообщений из 7, страница 1 из 1
Как загрузить XML-строку в XMLFragment или XMLNode?
    #36458091
androzavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, господа программисты!

Подскажите пожалуйста, как можно загрузить произвольный (не считая отсутствия корня, правильно оформленный) xml-фрагмент в документ, DocumentFragment или Node?

Вообще работаю с XML в Delphi, но нигде в интернете не нашел ответа на этот вопрос ни для одного языка. Не верится, что ни у кого не возникало такой задачи?

Сейчас просто оборачиваю приходящую строку во временный тег и с помощью LoadXMLData получаю временный IXMLDocument, с которым и работаю. Но мне кажется, что должен быть более простой (и наверное правильный) путь. Что-то типа XMLDocfragment.Loadxml (как у документа).

Буду благодарен за любые подсказки.
...
Рейтинг: 0 / 0
Как загрузить XML-строку в XMLFragment или XMLNode?
    #36459060
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласно MSDN IXMLDOMDocumentFragment наследник от IXMLDOMNode. Следовательно узел корневой должен быть один.

А вот если взять ISAXXMLReader и подсунуть ему входной IStream, то, по идее, он распарсит первый корневой узел и остановится. При этом позиция в IStream будет указывать на следующий узел.

В общем мне кажется, что если задача и имеет решение, то только через SAX

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Как загрузить XML-строку в XMLFragment или XMLNode?
    #36459663
androzavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Вообще, насколько я себе это представляю, то, что IXMLDOMDocumentFragment наследник от IXMLDOMNode, вовсе не означает, что у него должен быть корневой элемент. Более того, по большому счету, в IXMLDOMNode тоже нет требования наличия одного корневого элемента, просто IXMLDOMNode - это и есть один узел (любой, не обязательно элемент). Такое требование предъявляется, по моему, только к документу.
Кстати, согласно спецификации W3C :
DOM level 2 CoreDocumentFragment is a "lightweight" or "minimal" Document object. It is very common to want to be able to extract a portion of a document's tree or to create a new fragment of a document...
... The children of a DocumentFragment node are zero or more nodes representing the tops of any sub-trees defining the structure of the document. DocumentFragment nodes do not need to be well-formed XML documents (although they do need to follow the rules imposed upon well-formed XML parsed entities, which can have multiple top nodes).
Так что похоже для данной задачи DocumentFragment подходит как нельзя лучше... Но не будем зацикливаться на фрагментах. Более частная задача:как можно загрузить XML-строку в node? Например: получить сразу node (любой - IXMLDOMNode, IDOMNode, IXMLNode - неважно через какой интерфейс) имея строку '<root/>' не загружая ее в документ. По-моему вполне реальная задача.

P.S.: Спасибо за предложенный вариант с SAX. Честно говоря с SAX практически не знаком, но разве он предназначен не только для чтения? А мне нужна возможность изменения и в конечном итоге нужен DOM. Но все равно спасибо - подумаю в этом направлении.
...
Рейтинг: 0 / 0
Как загрузить XML-строку в XMLFragment или XMLNode?
    #36461860
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
androzavrБолее того, по большому счету, в IXMLDOMNode тоже нет требования наличия одного корневого элемента, просто IXMLDOMNode - это и есть один узел (любой, не обязательно элемент)Либо я Вас не понял, либо Вы в этой фразе сами себе противоречите.

Именно, что узел один. Это может быть любой из этих (а может и не любой). Быть может с потомками. Но это не список узлов.
androzavrБолее частная задача:как можно загрузить XML-строку в node? Например: получить сразу node (любой - IXMLDOMNode, IDOMNode, IXMLNode - неважно через какой интерфейс) имея строку '<root/>' не загружая ее в документ.Глупый вопрос - зачем? Почему эту строку нельзя загрузить в документ?

Кроме того каждый IXMLDOMNode имеет not null read only поле ownerDocument. Как, в свете этого, Вы собираетесь работать с обособленным IXMLDOMNode не привязанным ни к какому документу?
androzavrP.S.: Спасибо за предложенный вариант с SAX. Честно говоря с SAX практически не знаком, но разве он предназначен не только для чтения? А мне нужна возможность изменения и в конечном итоге нужен DOM. Но все равно спасибо - подумаю в этом направлении.Идея была в том, чтобы в процессе чтения формировать DOM
...
Рейтинг: 0 / 0
Как загрузить XML-строку в XMLFragment или XMLNode?
    #36470720
androzavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_Именно, что узел один. Это может быть любой из этих (а может и не любой). Быть может с потомками. Но это не список узлов.А я и не говорил, что "это список узлов". Я имел ввиду наличие корневого ЭЛЕМЕНТА, т.к. видимо тоже не слишком внимательно прочел Ваше сообщение (каюсь...) и не заметил, что Вы в свою очередь говрили о корневом узле (в терминах DOM).
Если же говорить о IXMLDOMDocumentFragment, то это действительно один узел, который может иметь потомков. Но сам он в некотором смысле "особенный", т.к. не имеет представления в виде XML, а его потомки имеют. Таким образом ему можно создать несколько потомком - элементов, которые в представлении XML (IXMLDOMDocumentFragment.xml) не будут иметь корневого элемента. Пример .
Примерно это мне и надо получить, но не создавая по отдельности все дочерние узлы, а скормив парсеру xml-фрагмент (строку) получить объект IXMLDOMDocumentFragment.
_Vasilisk_androzavrБолее частная задача:как можно загрузить XML-строку в node? Например: получить сразу node (любой - IXMLDOMNode, IDOMNode, IXMLNode - неважно через какой интерфейс) имея строку '<root/>' не загружая ее в документ.Глупый вопрос - зачем? Почему эту строку нельзя загрузить в документ?Пример неудачный. Пускай будет строка не '<root/>', а, например, '<node1/><node2/><node3><child1/></node3>'
_Vasilisk_Кроме того каждый IXMLDOMNode имеет not null read only поле ownerDocument. Как, в свете этого, Вы собираетесь работать с обособленным IXMLDOMNode не привязанным ни к какому документу?А я и не собираюсь работать с обособленным IXMLDOMNode (в данном случае - с обособленным IXMLDOMDocumentFragment). У меня есть IXMLDOMDocument, от которого создан IXMLDOMDocumentFragment и вот в него мне нужно загрузить xml-строку, чтоб потом одним действием сделать все поддерево дочерним определенному элементу объекта IXMLDOMDocument.
Сейчас же приходится создавать временный документ. Загружать в него строку, предварительно обернутую временным корневым тегом. А затем клонировать в основной документ все дочерние узлы корневого элемента временного документа. Вот как...
_Vasilisk_Идея была в том, чтобы в процессе чтения формировать DOMЭто я и так уже понял... :) Правда до сих пор не добрался до того чтоб наконец попробовать SAX...
...
Рейтинг: 0 / 0
Как загрузить XML-строку в XMLFragment или XMLNode?
    #36471196
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
androzavrТаким образом ему можно создать несколько потомком - элементов, которые в представлении XML (IXMLDOMDocumentFragment.xml) не будут иметь корневого элемента. Пример Теперь все понял. Бардак!
androzavrПравда до сих пор не добрался до того чтоб наконец попробовать SAX...Похоже это единственный выход.

P.S. А чем не устраивает обрамление общим тегом и загрузка в IXMLDOMDocument?
...
Рейтинг: 0 / 0
Как загрузить XML-строку в XMLFragment или XMLNode?
    #36471741
androzavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_androzavrПравда до сих пор не добрался до того чтоб наконец попробовать SAX...Похоже это единственный выход.Да, видимо настало время все-таки разбираться с SAX...
_Vasilisk_P.S. А чем не устраивает обрамление общим тегом и загрузка в IXMLDOMDocument?Да в принципе сейчас у меня так все и работает. Просто я надеялся, что я где-то что-то упускаю из виду и на самом деле задача имеет красивое, элегантное решение (в две строчки)... Вообще я думал, что у парсера существует больше возможностей по разбору xml-строк, видимо ошибался.
Ну, как я понимаю, тема закрыта. Подумаю еще в сторону SAX.
_Vasilisk_, спасибо за помощь!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как загрузить XML-строку в XMLFragment или XMLNode?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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