我有以下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()时,我正在跳过节点 我已经尝试过这个主题的几个变种,没有一个完美无缺,这表明我在这里缺少一些重要的东西。
任何指针?
由于
答案 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