![]() |
![]() |
![]() |
|
DOMDocument получить структуру файла. | ☑ | ||
---|---|---|---|---|
0
zladenuw
08.11.12
✎
12:09
|
ДОМ=Новый COMОбъект("MSXML2.DOMDocument.6.0");
ДОМ.load(filexml); test= ДОМ.selectSingleNode("test").childNodes(); Тут получаю родителя и выбираю его подчиненные, а другому ? Если я не знаю структуры хмл Можно ли с ДОМ получить Структуру хмл? |
|||
1
zladenuw
08.11.12
✎
12:12
|
можно ли сразу получить всю структуру, без перебора ?
|
|||
2
Ork
08.11.12
✎
12:16
|
Обход дерева можно сделать так:
Для поз=1 По ХМЛ.documentElement.childNodes().Length Цикл Узел=ХМЛ.documentElement.childNodes(поз-1); Если Узел.NodeName="Типы" Тогда ОбработатьТипТовара(Узел); ИначеЕсли Узел.NodeName="Номенклатура" Тогда ... (1) Что означает "получить сруктуру" по отношению к ДОМ? Он изначально не структурирован. Это вам не ДБФ. |
|||
3
Ork
08.11.12
✎
12:18
|
+(2) Процедура-пример обхода узла
Процедура ОбработатьТипТовара(Узел) Для поз=1 По Узел.childNodes().Length Цикл ХМЛТип=Узел.childNodes(поз-1); _Код=Число(ХМЛТип.getAttributeNode("Код").NodeValue); ... Спр.Наименование=ХМЛТип.getAttributeNode("Наименование").NodeValue; //Спр.Скидка=Число(ХМЛТип.getAttributeNode("Скидка").NodeValue); ... КонецПроцедуры |
|||
4
zladenuw
08.11.12
✎
12:19
|
(2) так если я загрузил в ДОМ хмл. он же знает что есть элементы ХМЛ.documentElement.childNodes().
вот как получить NodeName тегов. всех которые есть в этом хмл |
|||
5
zladenuw
08.11.12
✎
12:20
|
(3) вот ты указываешь _Код=Число(ХМЛТип.getAttributeNode("Код").
А если я не знаю какие там. мне нужно их все получить |
|||
6
zladenuw
08.11.12
✎
12:21
|
то есть только перебор ?
|
|||
7
zladenuw
08.11.12
✎
12:24
|
Для каждого parseError из ДОМ.parseError.AllErrors Цикл
КонецЦикла; Вот тут ошибки тегов. А как мне допиться такого же что бы 1 переход получить все теги. если я не знаю сколько вложений ? Получается что перебор и рекурсия ? |
|||
8
Ork
08.11.12
✎
12:28
|
Из xmlsdk30.chm
Properties "attributes" Contains the list of attributes for this node. Read-only. "baseName*" Returns the base name for the name qualified with the namespace. Read-only. "childNodes" Contains a node list containing the children nodes. Read-only. "dataType*" Specifies the data type for this node. Read/write. "definition*" Returns the definition of the node in the "document" type definition (DTD) or schema. Read-only. "firstChild" Contains the first child of this node. Read-only. "lastChild" Returns the last child node. Read-only. namespaceURI* Returns the Uniform Resource Identifier (URI) for the namespace. Read-only. "nextSibling" Contains the next sibling of this node in the parent's child list. Read-only. nodeName Contains the qualified name of the element, attribute, or entity reference, or a fixed string for other node types. Read-only. nodeType Specifies the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. Read-only. nodeTypedValue* Contains this node's value, expressed in its defined data type. Read/write. nodeTypeString* Returns the node type in string form. Read-only. nodeValue Contains the text associated with the node. Read/write. ownerDocument Returns the root of the document that contains this node. Read-only. parentNode Contains the parent node (for nodes that can have parents). Read-only. parsed* Contains True if this node and all descendants have been parsed and instantiated; False if any nodes remain to be parsed. Read-only. prefix* Returns the namespace prefix. Read-only. previousSibling Contains the left sibling of this node. Read-only. specified* Indicates whether the node (usually an attribute) is explicitly specified or derived from a default value in the DTD or schema. Read-only. text* Contains the text content of the node and its subtrees. Read/write. xml* Contains the XML representation of the node and all its descendants. Read-only. * denotes an extension to the Worldwide Web Consortium (W3C) DOM. =================== attributes - список атрибутов нода. |
|||
9
zladenuw
08.11.12
✎
12:32
|
ДОМ=Новый COMОбъект("MSXML2.DOMDocument.6.0");
ДОМ.load(filexml); (0) ДОМ.documentElement.attributes показывает что пусто |
|||
10
Ork
08.11.12
✎
12:32
|
+(8) text - контекст нода в виде строки.
Короче - читите первоисточники. xmlsdk30.chm взято вполне официально здесь : http://www.microsoft.com/en-us/download/confirmation.aspx?id=23412 |
|||
11
Ork
08.11.12
✎
12:34
|
(9) Тип вот єтого вот attributes - список. Чтобы убедиться посто или нет - нужен Count.
|
|||
12
zladenuw
08.11.12
✎
12:34
|
(10) я то понял.
думал что можно получить сразу все. ладно,Буду анализировать тогда по схеме xsd |
|||
13
Ork
08.11.12
✎
12:39
|
(12) Да можно получить все... Только не сразу. А последовательным перебором.
Еще раз - это XML. Он изначально не структурирован. Простая проверка по схеме даст ответ соответствует ли структура XML схеме. Но не околичестве элементов в узле. Если структура каждого соответствует схеме. |
|||
14
zladenuw
08.11.12
✎
12:42
|
ясно.а вот если загрузить схему в XDTO. то я могу при создание элемента получить его поля.
как это можно применить без XDTO 8 ? |
|||
15
zladenuw
08.11.12
✎
12:48
|
(14)
Можно так Let's create a method for converting the object to XML. public string ToXML(Object oObject) { XmlDocument xmlDoc = new XmlDocument(); XmlSerializer xmlSerializer = new XmlSerializer(oObject.GetType()); using (MemoryStream xmlStream = new MemoryStream()) { xmlSerializer.Serialize(xmlStream, oObject); xmlStream.Position = 0; xmlDoc.Load(xmlStream); return xmlDoc.InnerXml; } } Я хочу что бы хмл создался по xsd. я так понимаю что до сериализации. мне нужно привести поля к соответствию с xsd. тогда я на выходе получу хмл с нужной структурой. так ? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |