如何使用.Net 2.0中的XMLReader读取纯XML中的所有元素?

时间:2009-07-10 20:55:37

标签: .net-2.0 xmlreader

我有以下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 个答案:

答案 0 :(得分: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编写以来已经有一段时间了。这是一个基本状态机,它首先检测是否找到了Element,然后开始查找文本值。

答案 1 :(得分:0)

试试这个(未经测试):

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

答案 2 :(得分:0)

如何使用reader.ReadString()而不是reader.ReadElementString()?或者可能而不是只使用reader.Value来获取当前节点的值。

答案 3 :(得分: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
相关问题