msxml4.dll и формат XML

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
jetcom
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 181
Зарегистрирован: 12.01.2003 (Вс) 23:15
Откуда: Russia, Novorossiysk

msxml4.dll и формат XML

Сообщение jetcom » 22.05.2003 (Чт) 17:34

Взвесив все "за" и "против", по поводу вышеуказанного формата, описанные в одном из топиков на старом форуме, решил все-таки с ним поработать. Кто-нибудь может подсказать простейшие операции, как то: создать файл .XML (в VB), внести данные (изменить) и считать их, на конкретном примере кода? Или где на эту тему можно популярно почитать? Сразу предупрежу: на Яндексе и www.planet-source-code.com я уже побывал, пример RayShade в старом форуме читал, но недопонял... :roll: :?: :!:
Всё сбудется!!!

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 22.05.2003 (Чт) 18:20

Код: Выделить всё
Option Explicit

Public Function test()
   
    Dim XMLDoc As MSXML2.DOMDocument
    Dim RootNode As MSXML2.IXMLDOMElement
    Dim Nodes1 As MSXML2.IXMLDOMNodeList
    Dim Node1 As MSXML2.IXMLDOMElement
    Dim Node2 As MSXML2.IXMLDOMElement
   
    Set XMLDoc = getXML
    Set RootNode = XMLDoc.selectSingleNode("Books")
    'or
    'Set RootNode = XMLDoc.firstChild
   
    Set Nodes1 = RootNode.selectNodes("Book")
    For Each Node1 In Nodes1
        With Node1
            Debug.Print "Title: "; .Attributes.getNamedItem("Title").Text
            Set Node2 = .selectSingleNode("Author")
            With Node2
                Debug.Print "Author: ";
                Debug.Print .Attributes.getNamedItem("Name").Text,
                Debug.Print "Age: "; .Attributes.getNamedItem("Age").Text,
                Debug.Print "Country: "; .Attributes.getNamedItem("Country").Text
                Debug.Print "Comment: "; .Text
            End With
            Debug.Print "Description: "; .Text
            Debug.Print "Pages "; .Attributes.getNamedItem("Pages").Text
            Debug.Print
        End With
    Next
   
End Function

Public Function getXML() As MSXML2.DOMDocument
   
    Dim XMLDoc As MSXML2.DOMDocument
    Dim RootNode As MSXML2.IXMLDOMElement
    Dim Node1 As MSXML2.IXMLDOMElement
    Dim Node2 As MSXML2.IXMLDOMElement
   
    Set XMLDoc = New MSXML2.DOMDocument
    XMLDoc.async = False
   
    Set RootNode = XMLDoc.appendChild(XMLDoc.createElement("Books"))
   
   
    Set Node1 = RootNode.appendChild(XMLDoc.createElement("Book"))
    With Node1
        Call .setAttribute("Title", "100 years without water")
        Call .setAttribute("Pages", 100)
        .Text = "This book about..."
        Set Node2 = .appendChild(XMLDoc.createElement("Author"))
        With Node2
            Call .setAttribute("Name", "Vasja Pupkin")
            Call .setAttribute("Age", 12)
            Call .setAttribute("Country", "Ukraine")
            .Text = "This author is..."
        End With
    End With
   
   
    Set Node1 = RootNode.appendChild(XMLDoc.createElement("Book"))
    With Node1
        Call .setAttribute("Title", "1000 kilometers without foot")
        Call .setAttribute("Pages", 300)
        .Text = "This book about..."
        Set Node2 = .appendChild(XMLDoc.createElement("Author"))
        With Node2
            Call .setAttribute("Name", "Kolja Zadristchev")
            Call .setAttribute("Age", 13)
            Call .setAttribute("Country", "USA")
            .Text = "This author is..."
        End With
    End With
   
   
    Set Node1 = RootNode.appendChild(XMLDoc.createElement("Book"))
    With Node1
        Call .setAttribute("Title", "10000 programm lines without head")
        Call .setAttribute("Pages", 150)
        .Text = "This book about..."
        Set Node2 = .appendChild(XMLDoc.createElement("Author"))
        With Node2
            Call .setAttribute("Name", "Petja Balabanov")
            Call .setAttribute("Age", 17)
            Call .setAttribute("Country", "Japon")
            .Text = "This author is..."
        End With
    End With
   
    Set getXML = XMLDoc
   
    If (Not Node2 Is Nothing) Then Set Node2 = Nothing
    If (Not Node1 Is Nothing) Then Set Node1 = Nothing
    If (Not RootNode Is Nothing) Then Set RootNode = Nothing
    If (Not XMLDoc Is Nothing) Then Set XMLDoc = Nothing
   
End Function

jetcom
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 181
Зарегистрирован: 12.01.2003 (Вс) 23:15
Откуда: Russia, Novorossiysk

Сообщение jetcom » 22.05.2003 (Чт) 18:30

2skiperski: Спасибо за оперативный ответ!
Ушел пробовать и разбираться... 8)
Всё сбудется!!!

jetcom
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 181
Зарегистрирован: 12.01.2003 (Вс) 23:15
Откуда: Russia, Novorossiysk

Сообщение jetcom » 22.05.2003 (Чт) 23:29

Все работает и интуитивно вроде бы понятно, но все-равно много белых пятен, и почитать на эту тему чего-нить хочется!
2skiperski:
XML в твоем коде создается виртуально, а каким образом его создать на диске и потом "прощупать"?........
Всё сбудется!!!

Morfius
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 25.03.2003 (Вт) 14:27
Откуда: КМВ

Сообщение Morfius » 23.05.2003 (Пт) 8:58

А ссылочку можно где про XML подробно написано??? :D
Жизнь похожа на сказку, - Чем дальше, тем страшнее

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 23.05.2003 (Пт) 9:11

2jetcom: сохранить - это совсем просто
XMLDoc.save "c:\temp\MyXML.xml"

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 23.05.2003 (Пт) 12:43

jetcom писал(а):Все работает и интуитивно вроде бы понятно, но все-равно много белых пятен, и почитать на эту тему чего-нить хочется!

Понятия не имею где и чего. Сам всё по примерам изучал.

jetcom писал(а):XML в твоем коде создается виртуально, а каким образом его создать на диске и потом "прощупать"?........

Как уже подсказал Rainbow можно писать методом Save
Код: Выделить всё
XMLDoc.save "<path>"

В этом случае XML сохраняется в UNICODE и открыв его в каком-нибудь текстовом редакторе ты увидишь все не латинские буквы как кракозябры. И читать тогда надо методом Load.

Есть другая пара методов, точнее св-во XML и метод LoadXML. Вычитываешь XML в строку и сохраняешь её на диск. Тогда его можно будет нормально прочитать в текстовом редакторе, но не всегда можно будет отобразить в XML-редакторах, т.к. в XML не допускаются символы отличные от UNICODE. Загрузить такой XML можно методом LoadXML, сначала вычитав значение из файла в строковую переменную.


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

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

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

    TopList