Имя: Пароль:
1C
1С v8
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. тогда я на выходе получу хмл с нужной структурой. так ?