如何使用xmlTextReader提取值?

时间:2011-07-18 17:14:56

标签: .net xml vb.net xmlreader

我正在尝试解析这个XML以获取小狗和小猫的价值。

<Pets>
    <Puppies>4</Puppies>
    <Kittens>2</Kittens>
</Pets>

这是我的代码

        baseReader = New IO.StringReader(testXml)
        xmlReader = New System.Xml.XmlTextReader(baseReader)

        While xmlReader.Read()

        Select Case xmlReader.Name
            Case "Puppies"
                puppyCount = CLng(xmlReader.ReadInnerXml)
            Case "Kittens"
                kittenCount = CLng(xmlReader.ReadInnerXml)
            Case Else

        End Select
        End While

在第一次阅读时,元素名称为“Pets”,Case Else会被点击。在下一次阅读时,元素名称为“Puppies”,puppyCount正确设置为4。

但是它似乎跳过“小猫”并直接转向内部XML。我该怎么办?

编辑:XmlReader比其他.NET解析器更快,但我的文件足够小,可能不是一个好处。 Joe Ferner's tests.

编辑2:原始代码中存在读者定位问题。

2 个答案:

答案 0 :(得分:1)

除非性能非常重要,否则我建议使用LINQ to XML:

Dim elem = XElement.Parse(testXml)

Dim puppyCount = CType(elem.Element("Puppies").Value, integer)
Dim kittenCount = CType(elem.Element("Kittens").Value, integer)

答案 1 :(得分:0)

我对XMLTextReade r和XMLReader都遇到了同样的问题。最初的问题是.ReadInnerXML()有时可以执行行尾读取,然后在循环的顶部进行另一次读取,这当然意味着您已跳过下一个元素。您可以尝试使用.ReadString - 这对我有用。