1

我有以下 XML:

<XMLDictionary>
  <a>b</a>
  <c>d</c>
  <e>f</e>
</XMLDictionary>

我正在尝试获取映射a:b,c:d,e:f,但我不太清楚如何简单地做到这一点。

我当前的代码如下所示:

    Do While reader.Read()
        If reader.NodeType = Xml.XmlNodeType.Element Then
            Me.Add(reader.Name, reader.ReadElementString)
        End If
    Loop

问题是我不知道如何在不调用 ReadElementString 的情况下读取元素的内容,并且 ReadElementString 将“指针”推进到下一个节点(因此 reader.Name 已经具有下一个值)。在循环中我再次调用 Read() 时,我正在跳过节点。
我在这个主题上尝试了几种变体,但没有一个能完美运行,这表明我在这里遗漏了一些重要的东西。

任何指针?

谢谢

4

4 回答 4

2

我不知道我是否会为您正在做的事情使用 XmlReader,可能只是一个 XmlDocument,但如果您想要阅读器,可能这样的事情可能会起作用:

Dim lastNode As String = string.Empty
Do While reader.Read()
     If reader.NodeType = Xml.XmlNodeType.Element Then
        lastNode = reader.Name
     Else If reader.NodeType = Xml.XmlNodeType.Text AND NOT string.IsNullOrEmpty(lastNode) THEN
         Me.Add(lastNode,reader.Value)
         lastNode = string.Empty    
     End If
Loop

请原谅我的任何语法错误;自从用 VB.net 编写以来已经有一段时间了。这是一个基本状态机,它首先检测是否找到了元素,然后开始寻找文本值。

于 2009-07-10T21:16:31.737 回答
0
   Dim name As String
   Dim value As String

   While reader.Read()
        If reader.NodeType = XmlNodeType.Element Then
            name = reader.Name
            reader.Read()
            value = If((String.IsNullOrEmpty(reader.Value) OrElse reader.Value.Contains(Environment.NewLine)), "", reader.Value)
            Me.Add(name, value)
        End If
    End While
于 2009-07-10T22:27:03.607 回答
0

使用 reader.ReadString() 代替 reader.ReadElementString() 怎么样?或者可能只是使用 reader.Value 来获取当前节点的值。

于 2009-07-10T21:19:22.573 回答
0

试试这个(未经测试):

    Do While reader.Read()
            If reader.NodeType = Xml.XmlNodeType.Element Then
                    Me.Add(reader.Name, reader.Value)
            End If
    Loop
于 2009-07-10T21:01:26.180 回答