gpt4 book ai didi

c# - XmlReader 跳过元素

转载 作者:数据小太阳 更新时间:2023-10-29 02:01:04 25 4
gpt4 key购买 nike

我有以下代码可以从大型 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>

最佳答案

XNode.ReadFrom 将您的读者推进到下一个事件打开标签(如果它们之间没有空格) 然后是 reader.Read将前进到该标签的内部文本。您需要像这样在 XNode.ReadFrom 之后跳过 reader.Read

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();
}
}
}
}

请注意,如果您将 Campaign 节点嵌套在其他 Campaign 节点中,这些节点将最终成为父节点的一部分,而不是作为单独的节点被拉出。

关于c# - XmlReader 跳过元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26787765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com