我无法导入"行ID" XML节点进入VB.net中的DataGridView

时间:2014-03-26 01:07:15

标签: xml vb.net datagridview rowid

如果我导入此类数据,则无效。

调试也显示

"类型' System.Xml.XmlException'的第一次机会异常发生在System.Xml.dll"

<?xml version="1.0" encoding="utf-8" ?>
<XMLDocument>
  <Books>
    <Book>
      <row id="0">
    <data_rate_in_as_string>0B</data_rate_in_as_string>
    <data_rate_out_as_string>0B</data_rate_out_as_string>
    <downloaded_as_string>956.6MB</downloaded_as_string>
    <elapsed_as_string>174d2h48m49s</elapsed_as_string>
      </row>
    </Book>
    <Book>
      <row id="1">
    <data_rate_in_as_string>0B</data_rate_in_as_string>
    <data_rate_out_as_string>0B</data_rate_out_as_string>
    <downloaded_as_string>956.6MB</downloaded_as_string>
    <elapsed_as_string>174d2h48m49s</elapsed_as_string>
      </row>
    </Book>
  </Books>
</XMLDocument>

但是,如果我完全删除行ID,它将起作用,我可以导入我的数据。 我想保留我的行ID,我也想将它们添加到我的datagridview中。

这是项目代码,如果它有帮助的话。

    Public Shared Function EmptyStringToNull(o As String) As Object
    Dim ret As Object = DBNull.Value
    Try
        If o.Trim.Length = 0 Then
            ret = DBNull.Value
        Else
            ret = o
        End If
    Catch ex As Exception
    End Try
    Return ret
End Function

Private Sub ReadXMLFile()
    Dim xmlDoc As New System.Xml.XmlDocument
    Dim root As XmlElement = Nothing
    Dim nodes As XmlNodeList = Nothing
    Dim node As XmlNode = Nothing
    Dim xmlFile As String = ""
    Try
        OpenFileDialog1.ShowDialog()
        xmlFile = OpenFileDialog1.FileName
        xmlDoc.Load(xmlFile)
        root = xmlDoc.DocumentElement
        nodes = root.SelectNodes("//XMLDocument/Books/Book/") 'The XMLPath
        'nodes = root.SelectNodes("//result/data/row") 'The XMLPath
        Me.DataGridView1.Rows.Clear() 'Clear Grid
        For Each node In nodes
            Me.DataGridView1.Rows.Add(EmptyStringToNull(node("rowid").InnerText),
                                      EmptyStringToNull(node("data_rate_in_as_string").InnerText),
                                      EmptyStringToNull(node("data_rate_out_as_string").InnerText),
                                      EmptyStringToNull(node("downloaded_as_string").InnerText),
                                      EmptyStringToNull(node("elapsed_as_string").InnerText))
        Next
    Catch ex As Exception
    End Try
End Sub

1 个答案:

答案 0 :(得分:0)

尝试将代码的相关部分更改为:

nodes = root.SelectNodes("//XMLDocument/Books/Book") 'The XMLPath
Me.DataGridView1.Rows.Clear() 'Clear Grid
For Each node In nodes
    Me.DataGridView1.Rows.Add(EmptyStringToNull(node("row").GetAttribute("id")),
                              EmptyStringToNull(node("row")("data_rate_in_as_string").InnerText),
                              EmptyStringToNull(node("row")("data_rate_out_as_string").InnerText),
                              EmptyStringToNull(node("row")("downloaded_as_string").InnerText),
                              EmptyStringToNull(node("row")("elapsed_as_string").InnerText))
Next

以上修正的内容摘要:

  1. 您的XPath不应以斜杠(/
  2. 结尾
  3. 节点名称是&#34; row&#34;而不是&#34; rowid&#34;,你可以使用 .GetAttribute()函数获取XmlNode
  4. 的属性值
  5. 您尝试选择的其他元素是<row>的孩子 元素,因此您需要在
  6. 之前附加node("row")