- PR -

VB.NET の For Each文で、MSXMLが無限ループになります。

1
投稿者投稿内容
horiaki
会議室デビュー日: 2001/12/25
投稿数: 11
投稿日時: 2002-10-25 21:39
早速ですが、MSXML3.0のバグではまさかないと思いますが、DOMとVBのFor Each文を使って、複数の子要素を持つ任意の要素に対して、その子要素をひとつづつ拾っていこうと試しましたが、旧 VB6.0では、うまく作動しましたが、VB.NETでは無限ループになってしまします。
いくら考えてもわかりません。
僕の単純なミスかもしれませんが、皆さんのお知恵をお貸しください。

VB 6.0 では、下記のソースで作動します。
Private Sub Label1_Click()
Dim xml_str As String
xml_str = "<?xml version='1.0' encoding='UTF-8'?><root><A><child_1>111</child_1><child_2>222</child_2></A></root>"
Dim dom As DOMDocument30
Set dom = New DOMDocument30
dom.loadXML (xml_str)

Dim temp_node As MSXML2.IXMLDOMNode
Set temp_node = dom.documentElement

Set temp_node = temp_node.firstChild

Dim i As Integer

For i = 1 To temp_node.childNodes.length
MsgBox (temp_node.childNodes(i - 1).xml)
  '<child_1>111</child_1> と <child_2>222</child_2>が表示されてOK
Next

For Each x In temp_node.childNodes
  '同じく<child_1>111</child_1> と <child_2>222</child_2>が表示されてOK
MsgBox (x.xml)
Next
End Sub


ところが、VB.NETだと後半部分で For Eachを使うと無限ループになってしまします。


Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
Dim xml_str As String
xml_str = "<?xml version='1.0' encoding='UTF-8'?><root><A><child_1>111</child_1><child_2>22</child_2></A></root>"

Dim dom As New MSXML2.DOMDocument30()
dom.loadXML(xml_str)

Dim temp_node As MSXML2.IXMLDOMNode
temp_node = dom.documentElement

temp_node = temp_node.firstChild
Dim x As MSXML2.IXMLDOMNode

Dim i As Integer

For i = 1 To temp_node.childNodes.length
MsgBox(temp_node.childNodes(i - 1).xml) 'こちらはVB6.0と同様にOK。
Next

For Each x In temp_node.childNodes
MsgBox(x.xml)
   '<child_1>111</child_1>の無限ループとなる。
   '<child_2>222</child_2>が出てこない。
Next
End Sub

どうぞよろしくお願いします。




1

スキルアップ/キャリアアップ(JOB@IT)