我正在尝试阅读以下xml流,但我真的很挣扎。
<channelSnapshot xmlns="urn:betfair:games:api:v1">
<channel gameType="BLACKJACK" id="1444077" name="Exchange BlackJack">
<status>RUNNING</status>
<game id="190675">
<round>1</round>
<bettingWindowTime>30</bettingWindowTime>
<bettingWindowPercentageComplete>100</bettingWindowPercentageComplete>
<gameData>
<object name="Player 1">
<description/>
<status>IN_PLAY</status>
<property name="Card 1" value="NOT AVAILABLE"/>
<property name="Card 2" value="NOT AVAILABLE"/>
</object>
以下列方式获取流
Dim dataStream As Stream = response.GetResponseStream()
Dim reader As New XmlTextReader(dataStream)
如果元素位于开始标记和结束标记之间,例如
<status>RUNNING</status>
然后我可以访问值ok。 我一直在使用Select Case xmlnodetype,但是当nodetype是一个空格时使用它 我无法到达空白之外的元素。所以在下一行
<property name="Card 1" value="NOT AVAILABLE"/>
我无法超越财产这个词。
显而易见,这对我来说都是新手,所以我欢迎所有人和任何帮助。
答案 0 :(得分:1)
不同的方法怎么样?正如您目前所做的那样处理流似乎非常困难。
如果您将整个流读入字符串然后将该字符串加载到XDocument中,您将能够更轻松地处理该文件。
VB允许您以非常简单的方式从Xml文件访问数据,看看下面的代码,看看我的意思:
' get the response stream so we can read it
Dim responseStream = response.GetResponseStream()
' create a stream reader to read the response
Dim responseReader = New IO.StreamReader(responseStream)
' read the response text (this should be javascript)
Dim responseText = responseReader.ReadToEnd()
' load the response into an XDocument
Dim xmlDocument = XDocument.Parse(responseText)
' find all the player objects from the document
For Each playerObject In xmlDocument...<object>
' display the player's name (this is how you access an attribute)
Console.WriteLine("Player name: {0}", playerObject.@name)
' display the player's status (this is how you access an element)
Console.WriteLine("Player status: {0}", playerObject.<status>.Value)
Next
要获取播放器属性,您可以执行以下操作:
' go through the player's properties
For Each playerProperty In playerObject...<property>
' output the values
Console.WriteLine("Player property name: {0}", playerProperty.@name)
Console.WriteLine("Player property value: {0}", playerProperty.@value)
Next
正如其他人提到的那样,你的Xml格式不正确,但是XDocument会告诉你这个,所以你将能够修复它。
答案 1 :(得分:0)
答案 2 :(得分:0)
在创建XmlReader时,应考虑使用XmlReaderSettings来简化对基础流的解析(即XmlReaderSettings.IgnoreWhitespace)。
然后,您应该能够以类似于以下的方式解析流。
using (XmlReader reader = XmlReader.Create(dataStream))
{
while(reader.Read())
{
switch(reader.NodeType)
{
case XmlNodeType.Element:
// do something
case XmlNodeType.Attribute:
// do something
// etc...
}
}
}
另外,检查properties基类的methods和XmlReader以确定如何获取元素,属性和其他XML实体。
答案 3 :(得分:0)
您的XML格式不正确。你有没有关闭标签的开放标签。如果你缩进了XML,你会看到它。
此外,除非您使用.NET 1.1,否则不应使用XmlTextReader。使用XmlReader.Create。
除了直接使用XmlReader之外,您可能还需要查看LINQ to XML,它提供了一种更简单的搜索XML模型,或旧的XmlDocument,您可以从XmlReader加载。