したがって、基本的にCreateXML()
、次のコードで ""関数を呼び出すと、意図したとおりにxelementが作成されるという興味深い問題が発生しますが、それをxeleentのコレクションに追加しようとすると、" 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()
" " in " "をコメントアウトしてCreateXML()
コードをステップ実行すると、最初の反復後にforeachループが中断されず、コードは正しく機能します。
私は自分が何を間違っているのかわかりません(そして、はい、コードはパブリックメンバーによってインスタンス化されます、心配しないでください:私は自分の問題に関連する内部メソッドを投稿するだけです)...誰かがこの種に遭遇した場合以前の動作の場合、修正を試みるために正しい方向にプッシュしていただければ幸いです...具体的には、問題はコーディングが不十分なだけなのか、それともこの動作は私が使用しているメソッド/ライブラリの1つのプロパティの結果なのか?
1つの警告:HTMLAgilityPackを使用してファイルを解析し、情報を抽出していることは知っていますが、このコードの要件により、XDocumentを使用して上記の情報を書き込む必要があります...理由を聞かないでください。