чтение XML-файлов в vb6 - PullRequest
       1

чтение XML-файлов в vb6

17 голосов
/ 06 октября 2010

Я знаю, что легче читать 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-файл не находится под моим контролем, я застрял в нем уже пару часов.

Мне нужно прочитать пары ИМЯ-ЗНАЧЕНИЕ из этого XML-файла. как мне это сделать?

пожалуйста, помогите.

Ответы [ 4 ]

26 голосов
/ 06 октября 2010

Вы можете сделать это с MSXML , который предлагает функциональность, аналогичную некоторым из .NET XML API.У меня сейчас нет копии VB6, но это довольно просто.Сначала добавьте ссылку на MSXML из вашего проекта VB6.Затем вы должны сделать что-то вроде следующего:

  • Создать экземпляр MSXML2.DOMDocument
  • Вызвать метод Load для анализаФайл XML
  • Позвоните на selectNodes("/Report/Categories/Category").Это вернет объект IXMLDOMNodeList .
  • Затем можно выполнить цикл по списку узлов, получая каждый IXMLDOMNode через item или nextNode .
  • Затем вы можете получить name и value, используя свойство attributes XMLDOMNode или используя selectSingleNode("@name").Text и selectSingleNode("@value").Text
2 голосов
/ 06 октября 2010

Используйте MSXML , как указано в этом вопросе (и в статье, на которую ссылается Ардман).

Вы можете использовать IXMLDOMElement.getAttributeNode для чтения атрибутов.

Например, этот код ниже читает файл образца books.xml из 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
0 голосов
/ 17 мая 2018

Спасибо, ответы на эти вопросы мне очень помогли.Мне потребовалось 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
0 голосов
/ 06 октября 2010

вы можете использовать XSLT для преобразования XML из этой структуры в пару значений

http://www.xmlfiles.com/articles/sample_chapters/sams_xmlforaspnet/default.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...