我有点卡住了,目前在foreach循环的第二次运行开始时在异常'ex'中遇到错误。
为什么会发生这种情况,我做错了什么?
{"Unable to cast object of type 'System.Xml.Linq.XText' to type 'System.Xml.Linq.XElement'."} System.Exception {System.InvalidCastException}'
我的代码:
public static void LoadMyThing()
{
string configfp = @"\ConfigFiles\config.xml";
string basefp = @"\ConfigFiles\";
try
{
List<string> xmlNodes = new List<string>();
XDocument Xdoc = XDocument.Load(configfp);
XElement XmlLst = Xdoc.Element("mylistener");
foreach (XElement node in XmlLst.Element("parent").DescendantNodes())
{
thingy = (basefp + node.Value);
Thingylist.Add(thing);
}
}
catch(Exception ex)
{
WriteErrorLog("Thingy Loading error " + ex.ToString());
}
}
它要求的XML:
<?xml version="1.0" encoding="utf-8"?>
<mylistener>
<config>
<mailuser>b@c.com</mailuser>
<mailpass>H</mailpass>
<mailip>190</mailip>
<mailport>2</mailport>
<recipient>m</recipient>
</config>
<parent>
<b>\RFC16</b>
<b>\RFC122</b>
<b>\RF1</b>
<b>\RF32</b>
<b>\R33</b>
<b>\RFCIB</b>
</parent>
</mylistener>
答案 0 :(得分:1)
很难确定没有看到你的XML,但如果parent
节点有非XElement后代,那么我希望看到这个。例如
<parent>
<some node />
some text
</parent>
您需要知道如何处理这种情况,但避免异常的一种方法是迭代XNode而不是XElements
foreach (XNode node in XmlLst.Element("parent").DescendantNodes())
{
if (node is XElement)
{
thingy = (basefp + ((XElement)node).Value);
Thingylist.Add(mibbler);
}
else
{
// do something else
}
}