我有以下代码从大型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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
XML文件格式良好,具有以下结构.
<CRoot>
<Campaign CampaignID="136">
<!-- other nested elements -->
</Campaign>
<Campaign CampaignID="137">
<!-- other nested elements -->
</Campaign>
<!-- etc -->
</CRoot>
Run Code Online (Sandbox Code Playgroud)
juh*_*arr 10
XNode.ReadFrom正在推动您的读者到下一个Campaign开放标记(如果它们之间没有空格),那么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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您将Campaign节点嵌套在其他Campaign节点中,那么这些节点将最终作为父节点的一部分,而不会作为单独的节点拉出.
| 归档时间: |
|
| 查看次数: |
1617 次 |
| 最近记录: |