gfp*_*ste 0 c# foreach list linq-to-xml
因此,从本质上讲,我运行到哪里,到了"的号召时,一个有趣的问题CreateXML()是由下面的代码"功能,旨在创建一个的XElement,但后来,当我尝试将其添加到xeleents集合,而不是继续调用" CreateXML()"发起的foreach循环,foreach循环被打破,并且调用" WriteXML()".此外,虽然创建并填充了XElement,但它不会添加到List中.[澄清一下,我所指的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;
}
Run Code Online (Sandbox Code Playgroud)
当我在" List.Add()"中注释掉" CreateXML()"并逐步执行代码时,foreach循环在第一次迭代后不会被破坏,并且代码正常工作.
我不知道我做错了什么(是的,代码是由公共成员实例化的,不要担心:我只是将相关的内部方法发布到我的问题上)...如果有人遇到过这种情况以前的行为,我真的很感激推动正确的方向尝试纠正它... Sepcifically:问题只是编码不好,或者这种行为是我正在使用的方法/库之一的属性的结果?
有一点需要注意:我知道,我使用HTMLAgilityPack解析文件和提取信息,但在这个代码的要求迫使我使用的XDocument写入上述信息......不要问我为什么.
我不知道我做错了什么
对于初学者来说:
catch (Exception e) { }
Run Code Online (Sandbox Code Playgroud)
这让你无法看到正在发生的事情.我强烈怀疑你NullReferenceException因为_xelemlist无效而得到了,但这是次要问题.主要的问题是通过假装一切都很好,无论发生什么,没有任何记录,获得任何地方的唯一方法是通过调试,这是一个非常糟糕的体验,当你不需要通过它.
这是极为罕见的好主意捕获异常,没有任何记录吞下他们.这样做几乎绝不是一个好主意Exception.
每当您遇到难以诊断的问题时,请首先提高诊断能力.这样,当您下次遇到问题时,诊断起来会更容易.
| 归档时间: |
|
| 查看次数: |
325 次 |
| 最近记录: |