所以,本质上,我遇到了一个有趣的问题,当调用CreateXML()
以下代码中的“”函数时,会按预期创建一个 xelement,但是当我尝试将它添加到 xeleents 集合中时,而不是继续调用“ CreateXML()
”的foreach循环,而是中断foreach循环,并调用“ WriteXML()
”。此外,虽然创建并填充了 XElement,但它并未添加到列表中。[为澄清起见,我所指的 foreach 循环存在于 " ParseDoc()
" 方法中]
private List<XElement> _xelemlist;
private void WriteXml()
{
XElement head = new XElement("header", new XAttribute("headerattributename", "attribute"));
foreach (XElement xelem in _xelemlist)
{
head.Add(xelem);
}
XDocument doc = new XDocument();
doc.Add(head);
}
private void CreateXML(string attname, string att)
{
XElement xelem = new XElement("name", new XElement("child", new XAttribute(attname, att), segment));
_xelemlist.Add(xelem);
}
private void ExtractSegment(HtmlNode node)
{
HtmlAttribute[] segatts = node.Attributes.ToArray();
string attname = segatts[0].Value.ToString();
string att = node.InnerText.ToString();
CreateXML(attname, att);
}
private HtmlDocument ParseDoc(HtmlDocument document)
{
try
{
HtmlNode root = document.DocumentNode.FirstChild;
foreach (HtmlNode childnode1 in root.SelectNodes(".//child1"))
{
foreach (HtmlNode childnode2 in node.SelectNodes(".//child2"))
{
ExtractSegment(childnode2);
}
}
}
catch (Exception e) { }
WriteXml();
return document;
}
当我注释掉“ List.Add()
”中的“ CreateXML()
”并单步执行代码时,foreach 循环在第一次迭代后没有中断,并且代码可以正常工作。
我不知道我做错了什么(是的,代码是由公共成员实例化的,别担心:我只是将相关的内部方法发布到我的问题中)......如果有人遇到过这种情况之前的行为,我真的很感激朝着正确的方向努力尝试纠正它......特别是:问题只是编码不佳,还是这种行为是我正在使用的方法/库之一的属性的结果?
一个警告:我知道我正在使用 HTMLAgilityPack 来解析文件并提取信息,但是对这段代码的要求迫使我使用 XDocument 来编写所述信息......不要问我为什么。