私はvb.netでxmlファイルを読む方が簡単だと知っていますが、私たちのアプリケーションはまだ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ファイルからNAME-VALUEペアを読み取る必要があります。これをどうやってやるの?
助けてください。
[〜#〜] msxml [〜#〜] を使用すると、.NET XML APIの一部と同様の機能を提供できます。現在、VB6のコピーはありませんが、とても簡単です。まず、VB6プロジェクトから [〜#〜] msxml [〜#〜] への参照を追加します。次に、次のようなことを行います。
selectNodes("/Report/Categories/Category")
を呼び出します。 IXMLDOMNodeList オブジェクトを返します。name
プロパティを使用するか、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
この質問(およびArdmanによってリンクされた記事)でアドバイスされているように、 [〜#〜] msxml [〜#〜] を使用します。
IXMLDOMElement.getAttributeNode を使用して属性を読み取ることができます。
たとえば、次のコードは、MSDNから sample books.xmlファイル を読み取り、属性にアクセスします。 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
ありがとう、この質問の答えは私を助けてくれました。方法を理解するのに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
xSLTを使用して、XMLをこの構造から値のペアに変換できます
http://www.xmlfiles.com/articles/sample_chapters/sams_xmlforaspnet/default.asp