1. Для узлов разработаны функции, например, SetAttribute установит ему нужный атрибут 2. В данном случае, если файл создается с нуля, то никакие функции не нужны (хотя они есть в библиотеке Xml. Берем строки и склеиваем в нужном порядке, а потом все сохраняем в файл (LoadXML, SaveXML). Пример Dim s as string s = "<root>" s = s & "<product id="2">" s = s & ... 3. Лучше все коротко написать, используя объявление переменных, т.к. для компилятора это легче понять и он выдаст ошибку еще на уровне назначения переменной. Когда длинный текст, то его читать плохо да и ошибки внутри него требуют больше времени на поиск.
1. А можно по подробнее на примере функцию SetAttribute: чёта
database_node.setAttribute "xsi:noNamespaceSchemaLocation", "schema.xsd xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" не совсем катит, выдает ошибку. как правильно получить строку:
<database xsi:noNamespaceSchemaLocation='schema.xsd' xmlns:xsi='http://www.aaa.org/100/XMLSchema-instance'>
с помощью функции SetAttribute?
2. Как читать данные из XML-файла? Т.е. файл уже сформирован и мы из него программно должны прочитать данные по тэгам...
У каждого языка есть набор подсказок. Определяете object, например, узел если ввести узел, а потом точку, то автоматически покажутся свойства и функции, которы можно использовать. Держать их все в голове нереально, особенно для VB.NET. Dim oXMLDoc As MSXML2.DOMDocument Dim oXMLRootElement As MSXML2.IXMLDOMElement Dim oXMLMainEl As MSXML2.IXMLDOMElement Dim oXMLJobEl As MSXML2.IXMLDOMElement Dim oXMLEl As MSXML2.IXMLDOMElement Dim declPI As MSXML2.IXMLDOMProcessingInstruction Set oXMLDoc = New MSXML2.DOMDocument Set declPI = oXMLDoc.createProcessingInstruction("xml", "version=""1.0"" ") oXMLDoc.appendChild declPI Set oXMLRootElement = oXMLDoc.createElement("timesheet") oXMLDoc.appendChild oXMLRootElement Set oXMLMainEl = oXMLDoc.createElement("userid") oXMLMainEl.Text = UserName oXMLRootElement.appendChild oXMLMainEl Set oXMLJobEl = oXMLDoc.createElement("Job") oXMLJobEl.Text = "IS Time Sheet" oXMLMainEl.appendChild oXMLJobEl Set oXMLEl = oXMLDoc.createElement("Time") oXMLEl.setAttribute "Date", Format(Date, "dd/mm/yyyy") oXMLEl.setAttribute "Start", Format(Now, "short time") oXMLEl.setAttribute "End", Format(Now + 5, "short time") oXMLJobEl.appendChild oXMLEl oXMLDoc.save "c:\test.xml"
Спасибо, данный пример очень помог.
Но вот ещё несколько вопросов:
1. Допустим существует "ТАБЛИЦА" в БАЗА1.MDB с полями ПОЛЕ1, ПОЛЕ2, ПОЛЕ3, ПОЛЕ5, ПОЛЕ7 и "ТАБЛИЦА" в БАЗА2.MDB с полями ПОЛЕ1, ПОЛЕ2, ПОЛЕ3, ПОЛЕ4, ПОЛЕ6, ПОЛЕ7 (т.е. в "ТАБЛИЦЕ" в БАЗА1.MDB могут отсутствовать (присутствовать) поля, которые присутствуют (отсутствуют) в "ТАБЛИЦЕ" в БАЗА2.MDB ). Как программно выгрузить данные в XML-формат из "ТАБЛИЦЫ" в БАЗА1.MDB и программно вгрузить в "ТАБЛИЦУ" в БАЗА2.MDB, причем длина, допустим, ПОЛЯ3 в "ТАБЛИЦА" в БАЗА1.MDB может быть больше чем длина поля ПОЛЕ3 в "ТАБЛИЦА" в БАЗА2.MDB (тогда данные нужно обрезать до длины поля ПОЛЕ3 в "ТАБЛИЦЕ" в БАЗА2.MDB )?
Т.е. из "ТАБЛИЦЫ" в БАЗА1.MDB в XML-файл мы выгружаем данные со всех полей, а в "ТАБЛИЦУ" в БАЗА2.MDB вгружаем только те поля, которые пересекаются с полями "ТАБЛИЦЫ" в БАЗА1.MDB, и если в XML-файле нет ПОЛЯ4 из "ТАБЛИЦЫ" в БАЗА1.MDB, то в "ТАБЛИЦЕ" в БАЗА1.MDB ПОЛЕ4 должно быть пустым, а если поле ПОЛЕ5 в XML-файле есть из "ТАБЛИЦЫ" в БАЗА1.MDB, а в "ТАБЛИЦЕ" в БАЗА2.MDB его нет, то просто пропускать его...
2. Есть ли ограничения в XML-файле по количеству тегов (полей выгрузки) и количеству записей (самих данных)? Например необходимо выгрузить данные из таблицы, у которой более 200 Полей и количество записей составляе 40.000 - 50.000?
1. Пишите функцию, которая читает 1 запись - 1 узел (если нет данных, можно и обработать ошибку), данные сохраняете в массиве. Далее массив уже записываете в базу, естественно обрезая нужные данные. Применяете эту функцию столько раз, сколько нужно. Все подчиняется работе со строками.
2. Такие объемы данных обрабатываться будут очень медленно, на NET есть специальные функции пакетной обработки XML файлов. В рассылке был пример (шифрование) как прицепить NET проект к Access