Чтение xml файлов в vb6
Я знаю, что читать xml файлы в vb.net проще, но поскольку наше приложение все еще находится на vb6, мне нужна работа. но почему-то я застрял. также я не контролирую XML файл, поскольку он создается из другого приложения. Ниже приведен короткий код из xml файла,
<Report>
<Categories>
<Category name="CASHMAN" value="Cash Management" />
<Category name="IM" value="Inventory Management" />
<Category name="POS" value="Point of Sale" />
<Category name="PRODUCT" value="Product" />
</Categories>
</Report>
Если бы XML файл был в таком формате, я бы мог легко прочитать его.
<Report>
<Categories>
<name>CASHMAN</name>
<value>Cash Management</value>
</Categories>
<Categories>
<name>IM</name>
<value>Inventory Management</value>
</Categories>
<Categories>
<name>POS</name>
<value>Point of Sale</value>
</Categories>
<Categories>
<name>PRODUCT</name>
<value>Product</value>
<Categories>
<Report>
Но так как созданный xml файл не входит в мой контроль, я занимаюсь этим через пару часов.
Мне нужно прочитать пары NAME-VALUE из этого xml файла. как мне с этим заняться?
Пожалуйста, помогите.
Ответы
Ответ 1
Вы можете сделать это с помощью MSXML, который предлагает аналогичную функциональность, как некоторые из XML-API.NET. У меня нет копии VB6 прямо сейчас, но это довольно легко. Во-первых, добавьте ссылку на MSXML из проекта VB6. Затем вы сделали бы что-то вроде следующего:
- Создайте экземпляр MSXML2.DOMDocument
- Вызвать Загрузить метод для анализа XML файла
- Вызовите
selectNodes("/Report/Categories/Category")
. Это вернет объект IXMLDOMNodeList.
- Затем вы можете прокрутить список node, получая каждый IXMLDOMNode через элемент или nextNode.
- Вы можете получить
name
и value
с помощью свойства attributes
XMLDOMNode или используя selectSingleNode("@name").Text
и selectSingleNode("@value").Text
MSXML довольно гибкий, поэтому есть более короткий синтаксис, который вы можете использовать, но вышеописанное должно работать для вас. Если вы еще не поняли это, я отправлю код, когда попаду на машину с установленным VB6.
UDPATE:
Ниже приведен рабочий пример с использованием предоставленного вами примера XML.
Sub ParseXmlDocument()
Dim doc As New MSXML2.DOMDocument
Dim success As Boolean
success = doc.Load(App.Path & "\test.xml")
If success = False Then
MsgBox doc.parseError.reason
Else
Dim nodeList As MSXML2.IXMLDOMNodeList
Set nodeList = doc.selectNodes("/Report/Categories/Category")
If Not nodeList Is Nothing Then
Dim node As MSXML2.IXMLDOMNode
Dim name As String
Dim value As String
For Each node In nodeList
' Could also do node.attributes.getNamedItem("name").text
name = node.selectSingleNode("@name").Text
value = node.selectSingleNode("@value").Text
Next node
End If
End If
End Sub
Ответ 2
Используйте MSXML в соответствии с этим вопросом (и в статье, связанной с Ardman).
Вы можете использовать IXMLDOMElement.getAttributeNode для чтения атрибутов.
Например, этот код ниже читает sample books.xml file из MSDN и получает доступ к атрибуту. Вам нужна ссылка на версию Microsoft XML.
Private Sub Form_Load()
Dim xmlDoc As New MSXML2.DOMDocument30
Dim nodeBook As IXMLDOMElement
Dim nodeId As IXMLDOMAttribute
Dim sIdValue As String
xmlDoc.async = False
xmlDoc.Load App.Path & "\books.xml"
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
MsgBox ("You have error " & myErr.reason)
Else
Set nodeBook = xmlDoc.selectSingleNode("//book")
Set nodeId = nodeBook.getAttributeNode("id")
sIdValue = nodeId.xml
MsgBox sIdValue
End If
End Sub
Ответ 3
вы можете использовать XSLT для преобразования XML из этой структуры в значение пары
http://www.xmlfiles.com/articles/sample_chapters/sams_xmlforaspnet/default.asp
Ответ 4
Спасибо, ответы на эти вопросы мне очень помогли. Мне понадобилось 2 дня, чтобы понять, как
Set xmlDoc = CreateObject("Msxml2.DOMDocument")
Dim nodeBook
Dim nodeId
xmlDoc.async = False
xmlDoc.Load ("xmlfile url")
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
MsgBox ("You have error " & myErr.reason)
Else
Set nodeBook = xmlDoc.selectSingleNode("//Program")
Set nodeId = nodeBook.getAttributeNode("description")
wscript.Echo nodeId.value
End If
Ответ 5
сабка ответ галат хай бк пта ни кон кон си хатия кодирование кртэ хо тум лог