
ANDLL писал(а):В том то и дело. Как это сробить с помощью MSXML?
Dim xmlDoc As MSXML2.DOMDocument
Dim i As Long
Dim j As Long
Private Sub Form_Load()
Set xmlDoc = New DOMDocument
xmlDoc.async = False
xmlDoc.Load "c:\MyXML.xml"
For i = 0 To xmlDoc.documentElement.childNodes(0).childNodes.length - 1
For j = 0 To xmlDoc.documentElement.childNodes(0).childNodes(i).childNodes.length - 1
Next j
Next i
End Sub
ANDLL писал(а):Пробежался. А дальше чего? Вопрос, вроде технологический, может microsoft какой парсер выпустила, или нет?
Это долго и нудно. Проще в той-же XML-ке сохранять, к примеру, контрольную сумму этого файла. И при получении этой XML-ки в другом месте проверять ее. По крайней мере я так и делал, в свое время.
<?xml version="1.0" encoding="win-1251"?>
<!DOCTYPE package PUBLIC "-//MyDTD//My Protocol//EN" "http://www.acme.com/my.dtd">
....
Dim doc As MSXML2.DOMDocument
Dim xerr As MSXML2.IXMLDOMParseError
Set doc = New MSXML2.DOMDocument
doc.loadXML XMLString
Set xerr = doc.Validate()
If xerr.errorCode <> 0 Then
With xerr
Debug.Print "Error: " & .errorCode & " on line " & .Line & " position " & .linepos
Debug.Print .reason
Debug.Print .srcText
End With
End If
Почему долго и нудно? Один раз код написать более-менее универсальный..
А что делать если XML генерируется каким-нибудь удалённым серваком из БД? И нет возможности дописать контрольную сумму?
Set oSchemaCache = CreateObject("Msxml2.XMLSchemaCache.4.0")
nsTarget="http://www.example.microsoft.com/po"
oSchemaCache.add nsTarget, "po2.xsd"
Set oDoc = CreateObject("Msxml2.DOMDocument.4.0")
oDoc.async = false
oDoc.validateOnParse = true
set oDoc.schemas = oSchemaCache
oDoc.load "po2.xml"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3