使用xmlReader循环XML和元素

使用xmlReader循环XML和元素,xml,vb.net,xml-parsing,xmlreader,Xml,Vb.net,Xml Parsing,Xmlreader,我只得到一个计数器值为8,应该在100+左右 XML如下所示: Dim client As New WebClient() Dim xmlString As String = client.DownloadString("http://api.rovicorp.com/TVlistings/v9/listings/gridschedule/80000/info?locale=en-US&duration=220&includechannelimages=1&f

我只得到一个计数器值为8,应该在100+左右

XML如下所示:

   Dim client As New WebClient()
   Dim xmlString As String = client.DownloadString("http://api.rovicorp.com/TVlistings/v9/listings/gridschedule/80000/info?locale=en-US&duration=220&includechannelimages=1&format=xml&apikey=" & api_TV)
   Dim counter As Integer = 0

Using reader As XmlReader = XmlReader.Create(New StringReader(xmlString))
    Dim tvListings As XDocument = XDocument.Parse(xmlString)

    For Each blah As XElement In tvListings.Root.Elements
        counter += 1
    Next

    Debug.Print(counter)
End Using

来源
2012-01-24T15:20:46.453Z
等等等等。。。

如果您只需要一个
元素的计数,那么您只需要一个小的LINQ语句

c#

VB.Net

XDocument document = XDocument.Parse(XmlString);
var count = document.Descendants("GridChannel").Count();
试试这个吧

Dim document as XDocument = XDocument.Parse(XmlString)
Dim count = document.Descendants("GridChannel").Count()
考虑到您所发布的内容,应该只需要到达GridChannel节点,然后在其GridChannel子节点之间循环

请原谅我的无知,我是一个C#boy

通过这样做得到的:

Dim doc as XmlDocument =  new XmlDocument();
doc.LoadXml(xmlString)
XmlNode channelsNode = doc.documentElement.SelectSingleNode("GridChannels")
foreach XmlNode gridChannelNode in channelsNode.SelectNodes("GridChannel"))
///
Next
Dim jsonObject As RootObject=JsonConvert.DeserializeObject(属于RootObject)(s)
对于jsonObject.GridScheduleResult.GridChannel中的每个帖子
按字符串设置通道尺寸=后通道
Dim DisplayName作为字符串=post.DisplayName
如果post.ChannelImages.Count为0,则
Dim ImageUrl作为字符串=post.ChannelImages.Item(0).ToString
Dim tmpL为整数=InStr(ImageUrl,:“”)
Dim tmpR为整数=InStr(图像URL,“”)
如果结束
而计数器
您确定文档中包含超过8个
元素吗?请记住,
Elements()
方法只返回当前元素的直接子元素,因此您正在计算属于
Root
元素的直接子元素的元素数,该元素在XML中是
GetGridScheduleResult
。xmlstring神奇地从何处出现?@TonyHopkinson更新了OP以显示这一点。@MarcinJuraszek positive。这是一个有300多个频道的电视列表。也许你可以
Debug.Print()
你正在成功计数的8个节点,以获得更多的症状信息。计数为0。Dim count=blah.subjects(“GridChannel”).count()可能是因为GridChannel不是这样设置的,它的属性和子元素不重要。您的XML是否与上面的相同,包括大小写?我针对上述内容进行了测试,并得到了结果。如果您是从文件而不是字符串变量加载,请使用XDocument.Load(“pathtofile”),我仍然会使用0作为计数。Dim tvListings作为XDocument=XDocument.Load(“c:\temp\xml.xml”)Dim count=tvListings.substands(“GridChannel”).count()您的xml格式正确吗?在顶部包含XML声明?有一些事情你没有告诉我们。调试channelsNode.OuterXml时显示什么?
Dim doc as XmlDocument =  new XmlDocument();
doc.LoadXml(xmlString)
XmlNode channelsNode = doc.documentElement.SelectSingleNode("GridChannels")
foreach XmlNode gridChannelNode in channelsNode.SelectNodes("GridChannel"))
///
Next
    Dim jsonObject As RootObject = JsonConvert.DeserializeObject(Of RootObject)(s)

    For Each post In jsonObject.GridScheduleResult.GridChannels
        Dim Channel As String = post.Channel
        Dim DisplayName As String = post.DisplayName

        If post.ChannelImages.Count <> 0 Then
            Dim ImageUrl As String = post.ChannelImages.Item(0).ToString
            Dim tmpL As Integer = InStr(ImageUrl, ":")
            Dim tmpR As Integer = InStr(ImageUrl, ",")
        End If

        While counter < post.Airings.Count
            Dim Title As String = post.Airings.Item(counter).Title
            Dim EpisodeTitle As String = post.Airings.Item(counter).EpisodeTitle
        End While

        theTime = 0
        counter = 0
    Next