我要从一个大型XML文件中流出以下代码。但是,跳过了一些<Campaign/>元素。有什么原因吗?
public static IEnumerable<XElement> StreamItem(string uri)
{
using (var reader = XmlReader.Create(uri))
{
XElement campaign = null;
reader.MoveToContent();
// Loop through <Campaign /> elements
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.Name == "Campaign")
{
campaign = XNode.ReadFrom(reader) as XElement;
yield return campaign;
}
}
}
}更新
XML文件格式良好,结构如下.
<CRoot>
<Campaign CampaignID="136">
<!-- other nested elements -->
</Campaign>
<Campaign CampaignID="137">
<!-- other nested elements -->
</Campaign>
<!-- etc -->
</CRoot>发布于 2014-11-06 19:53:24
XNode.ReadFrom正在将您的读者推进到下一个活动--打开标记(如果它们之间没有空格),,那么reader.Read将前进到该标签的内部文本。您需要跳过像这样的reader.Read之后的XNode.ReadFrom。
public static IEnumerable<XElement> StreamItem(string uri)
{
using (var reader = XmlReader.Create(uri))
{
XElement campaign = null;
reader.MoveToContent();
// Loop through <Campaign /> elements
reader.Read();
while (!reader.EOF)
{
if (reader.NodeType == XmlNodeType.Element && reader.Name == "Campaign")
{
campaign = XNode.ReadFrom(reader) as XElement;
yield return campaign;
}
else
{
reader.Read();
}
}
}
}请注意,如果在其他活动节点中嵌套了活动节点,则这些节点最终将作为父节点的一部分而不是作为单独的节点被提取出来。
https://stackoverflow.com/questions/26787765
复制相似问题