这是周五,我的思想似乎已经转移到周末思考。异步阅读可能格式不正确的Xml
鉴于这种XML结构 -
<?xml version="1.0" encoding="utf-8"?>
<results requiredAttribute="somedatahere">
<entry>
<!-- Xml structure in here -->
</entry>
<entry>
<!-- Xml structure in here -->
</entry>
<entry>
<!-- Xml structure in here -->
</entry>
</results>
而这种代码(砍倒在核心代码),它使用一个XmlReader来读取数据,并异步地返回数据 -
response = (HttpWebResponse)request.GetResponse();
using (var reader = XmlReader.Create(response.GetResponseStream()))
{
Logger.Info("Collector: Before attempt to read data for {0}", url);
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.Name == "entry")
{
var el = XElement.ReadFrom(reader) as XElement;
if (el != null)
yield return el;
}
}
}
是什么从属性requiredAttribute中检索值的最简单方法是什么?
要考虑的关键是我不想在任何时候读取完整的xml文件,因为文件可能非常大。此外,数据来自HttpStream,因此您无法始终保证数据完整,并且随后外部结果元素格式良好。这似乎排除阅读结果元素,然后遍历它的子元素。
很抱歉,但我看不出你的答案说明了使用屈服时,异步返回检索到的数据返回属性值的最简单的方法? – ChoccyButton 2010-08-06 13:12:00
@Choccy yield没有任何关系,XML格式错误,XElement创建失败。 – Richard 2010-08-06 16:07:56
该代码已被使用并且正常工作。如果您尝试读取结果元素,但似乎尝试读取整个元素,问题就来了。如果您忽略该元素并开始在入门元素级读取,则读取器每次只读取1个条目,这对元素来说工作正常,但意味着您错过了所需的属性 – ChoccyButton 2010-08-08 08:58:22