
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.173] |
![]() |
|
![]() |
Сообщ.
#1
,
|
|
В нашем FAQ есть примеры загрузки и сохранения настроек посредством Get/SaveSetting и Get/WritePrivateProfileString, но нет посредством xml-парсера. Решил исправить это недоразумение, набросал короткий, но, по-моему, достаточно понятный и подробный пример
Процедура сохранения ![]() ![]() Private Sub SaveSettingsToXML() Dim objXMLDoc As New DOMDocument Dim objRootNode As IXMLDOMNode, objCurrentNode As IXMLDOMNode 'Создаем корневой узел Set objRootNode = objXMLDoc.createNode(NODE_ELEMENT, "settings", "") Call objXMLDoc.appendChild(objRootNode) If Me.WindowState = vbNormal Then 'Создаем узел, содержащий размеры формы Set objCurrentNode = objXMLDoc.createNode(NODE_ELEMENT, "form_size", "") 'И задаем ему в качестве аттрибутов размеры objCurrentNode.Attributes.setNamedItem(objXMLDoc.createAttribute("left")).Text = Str$(Me.Left) objCurrentNode.Attributes.setNamedItem(objXMLDoc.createAttribute("top")).Text = Str$(Me.Top) objCurrentNode.Attributes.setNamedItem(objXMLDoc.createAttribute("width")).Text = Str$(Me.Width) objCurrentNode.Attributes.setNamedItem(objXMLDoc.createAttribute("height")).Text = Str$(Me.Height) Call InsertWhiteSpace(objRootNode, vbCrLf + vbTab) Call objRootNode.appendChild(objCurrentNode) Call InsertWhiteSpace(objRootNode, vbCrLf + vbTab) End If 'Создаем узел, содержащий текст из нашего текстового поля Set objCurrentNode = objXMLDoc.createNode(NODE_ELEMENT, "text", "") objCurrentNode.Attributes.setNamedItem(objXMLDoc.createAttribute("text_length")).Text = Str$(Len(Text1.Text)) objCurrentNode.Text = Text1.Text Call objRootNode.appendChild(objCurrentNode) Call InsertWhiteSpace(objRootNode) Call objXMLDoc.save(XML_FILE) End Sub Процедура загрузки ![]() ![]() Private Sub LoadSettingsFromXML() Dim objXMLDoc As New DOMDocument Dim objRootNode As IXMLDOMNode, objCurrentNode As IXMLDOMNode objXMLDoc.async = False objXMLDoc.validateOnParse = False If Not objXMLDoc.Load(XML_FILE) Then Err.Raise objXMLDoc.parseError.errorCode, , objXMLDoc.parseError.reason End If Set objRootNode = objXMLDoc.selectSingleNode("settings") 'Выбираем узел с размерами и читаем его аттрибуты Set objCurrentNode = objRootNode.selectSingleNode("form_size") With Me .Left = Val(objCurrentNode.Attributes.getNamedItem("left").Text) .Top = Val(objCurrentNode.Attributes.getNamedItem("top").Text) .Width = Val(objCurrentNode.Attributes.getNamedItem("width").Text) .Height = Val(objCurrentNode.Attributes.getNamedItem("height").Text) End With 'Выбираем узел с текстом и читаем его значение Text1.Text = Replace(objRootNode.selectSingleNode("text").Text, vbLf, vbCrLf) End Sub Для начала этого должно быть достаточно. У парсера MSXML еще есть целый ряд полезных классов, как, например, IXMLDOMNodeList -- позволяет последовательно (или в желаемом порядке) читать дочерние узлы документа или другого узла. Полезно при загрузке множества одинаковых узлов, как, например, в списках воспроизведения. За подробностями советую пойти сюда: http://msdn.microsoft.com/en-us/library/ms760218.aspx Полный код в примере, в аттаче Прикреплённый файл ![]() |