修改web.config问题,解决了立即送分(50)

秋水与长天一色 2008-03-11 04:28:44
以前运行正常现在突然报错:
无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”。
以前做的时候,用另一种方法:会报这样的错!
但是自从我用现在的方法之后就不错了,可是事隔一周之后:突然报错!
郁闷之极呀!
相信有朋友和我一样郁闷过吧!
解决一下吧!
...全文
430 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengjian_428 2009-06-01
  • 打赏
  • 举报
回复
我也遇到这样的问题了
比如下面这段XML 当读取XmlNodeList 的时候<!-- 以下还没有建表-->这段注释也会被当成一个XmlNode读出来 但是这个XmlNode 是不可以转成XmlElement的。
解决办法是自己判断可不可以转换为XmlElement或者直接判断XmlNode 的类型

<TablePath ID="CSI_HIS_PRICES" Path="bonddata/csibond/historical_prices" Description="中证债券指数当前行情" UpdateToDay="false">
<Column ID="凸性_Convexity" ColumnName="Convexity" DBType="" DATAType="String" DefaultValue=""></Column>
<Column ID="到期收益率(%)_YieldToMaturity(%)" ColumnName="Maturity" DBType="" DATAType="String" DefaultValue=""></Column>
</TablePath>

<!-- 以下还没有建表-->
<TablePath ID="BOND_constituents" Path="bonddata/csibond/constituents_list" Description="最新样本数据" UpdateToDay="false">
<Column ID="日期_Date" ColumnName="DATE" DBType="Key" DATAType="Date" DefaultValue=""></Column>
<Column ID="成分券代码_ConstituentCode" ColumnName="Constituent_Code" DBType="Key" DATAType="Int" DefaultValue=""></Column>
<Column ID="成分券名称_ConstituentName" ColumnName="Constituent_Name" DBType="" DATAType="String" DefaultValue=""></Column>
</TablePath>

方文轩 2009-05-27
  • 打赏
  • 举报
回复
遇到类似问题,不过我的是在foreach那里报错……继续关注
adunisrunning 2009-03-09
  • 打赏
  • 举报
回复
你的web.config贴出来看一下
w5517160 2008-10-10
  • 打赏
  • 举报
回复
///<summary>
///获取根目录下的 web.config 文件路径
///
string filename = Server.MapPath("../web.config");
XmlDocument xmldoc = new XmlDocument();

///<summary>
///打开文件
///</summary>
xmldoc.Load(filename);

///<summary>
///获得文件中所有配置节点
///</summary>
XmlNodeList topM = xmldoc.DocumentElement.ChildNodes;

///<summary>
///在当前所有节点中循环查找
///</summary>

try
{
foreach (XmlElement ement in topM)
{
///<summary>
///判断是否存在<appSettings>配置节
///</summary>
///
XmlElement xe = ement as XmlElement;
if (xe.Name == "appSettings")
{
XmlNodeList node = xe.ChildNodes;
///<summary>
///判断是否存在定义的信息
///</summary>
if (node.Count > 0)
{
///<summary>
///在子节点中循环查找
///</summary>
foreach (XmlElement el in node)
{
///<summary>
///判断“key”是否为设置数据库连接的关键字
///</summary>

XmlElement wu = el as XmlElement;
if (wu.Attributes["key"].Value == "ConnectionSqlServer")
{
///<summary>
///修改“key”的值为对应的“value”值
///</summary>
wu.Attributes["value"].Value = AlterConnStr.Text;
}
}
}

///<summary>
///如果找到了节点,就退出该循环
///</summary>
break;
}
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}

///<summary>
///保存所做的修改
///</summary>
xmldoc.Save(filename);
xray2005 2008-03-11
  • 打赏
  • 举报
回复

foreach (XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe = xn as XmlElement;//最好不好用强制转换,建议使用as,这样如果转不过去话,就是null,不会报异常
if(xe!=null) //这样判断以下是否为null,或者你可以if(xe==null) return ;直接返回或做其他处理
{
Keyname = xe.Attributes["key"].InnerXml;//键值
switch (Keyname)
{
case "SiteName":
xe.Attributes["value"].Value = this.txtSiteName.Text;
break;
case "Sitecontent":
xe.Attributes["value"].Value = this.txtDescription.Text;

}
insus 2008-03-11
  • 打赏
  • 举报
回复
参考:

public string GetConnectionString()
{
return (IsExistKey("appSettings", appSettingsKey)) ? ConfigurationManager.AppSettings[appSettingsKey] : string.Empty;
}

private string GetXmlFileName()
{
return HttpContext.Current.Server.MapPath("~/Web.config");
}

private XmlDocument GetWebConfig()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(GetXmlFileName());
return xmlDoc;
}

public bool IsExistNode(string strNode)
{
XmlDocument xmlDoc = GetWebConfig();
XmlNode xmlNode = xmlDoc.SelectSingleNode(@"/" + strNode);

// retrieve the appSettings xmlNode
xmlNode = xmlDoc.SelectSingleNode("//" + strNode);
return (xmlNode != null);
}

public bool IsExistKey(string strNodeName, string strKey)
{
XmlDocument xmlDoc = GetWebConfig();
bool IsExist = false;

//在当前所有节点中循环查找
XmlNodeList topM = xmlDoc.DocumentElement.ChildNodes;
foreach (XmlElement element in topM)
{
//判断是否存在<appSettings>节点
if (element.Name == strNodeName)
{
XmlNodeList node = element.ChildNodes;
//判断是否存在定义的信息
if (node.Count > 0)
{
//在子节点中循环查找
foreach (XmlElement el in node)
{
//判断Key是否等于所需信息Liumm
IsExist = (el.Attributes["key"].InnerXml == strKey);
if (IsExist) break;
}
}
}
}
return IsExist;
}

public void SetValue(string key, string value)
{
XmlDocument xmlDoc = GetWebConfig();
XmlNode xmlNode = xmlDoc.SelectSingleNode(@"/appSettings");

// retrieve the appSettings xmlNode
xmlNode = xmlDoc.SelectSingleNode("//appSettings");
if (xmlNode == null)
{
throw new InvalidOperationException("appSettings section not found");
}
try
{
// XPath select setting "add" element that contains this key
XmlElement addElem = (XmlElement)xmlNode.SelectSingleNode("//add[@key='" + key + "']");
if (addElem != null)
{
addElem.SetAttribute("value", value);
}
// not found, so we need to add the element, key and value
else
{
XmlElement entry = xmlDoc.CreateElement("add");
entry.SetAttribute("key", key);
entry.SetAttribute("value", value);
xmlNode.AppendChild(entry);
}
//save it
try
{
XmlTextWriter writer = new XmlTextWriter(GetXmlFileName(), null);
writer.Formatting = Formatting.Indented;
xmlDoc.WriteTo(writer);
writer.Flush();
writer.Close();
}

catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
catch (Exception ex)
{
throw new InvalidOperationException(ex.Message);
}
}



或是你可以下载:
http://download.csdn.net/source/204079
private_xiaojun 2008-03-11
  • 打赏
  • 举报
回复
另外如果你之前说你没错的话
建议你检查一下你的xml文档是不是有问题
注意xml文档的格式, <?xml 这样必须都是顶头并且确定你要解析的xml无错
最后还可以把你的 xmlop.LoadXml换成 xmlop.Load
然后进行转换...
private_xiaojun 2008-03-11
  • 打赏
  • 举报
回复
上面写错了
xn.Attributes 意思就是不转换..
试...
private_xiaojun 2008-03-11
  • 打赏
  • 举报
回复
所有的地方都改成
xe.Attributes
..
..
..
试一下...
private_xiaojun 2008-03-11
  • 打赏
  • 举报
回复
XmlElement xe = (XmlElement)xn;//
把这段去掉
直接在swith里边使用 xn.Attributes["value"]......
  • 打赏
  • 举报
回复
这个我感保证一前绝对运行一切正常,但是现在就是报错
无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”。
  • 打赏
  • 举报
回复
代码来啦:

private void UpdateElement()
{
LoadXml();
XmlNodeList nodeList = xmlDoc.SelectSingleNode("/configuration/appSettings").ChildNodes;//获取appSettings节点的所有子节点
foreach (XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
Keyname = xe.Attributes["key"].InnerXml;//键值
switch (Keyname)
{
case "SiteName":
xe.Attributes["value"].Value = this.txtSiteName.Text;
break;
case "Sitecontent":
xe.Attributes["value"].Value = this.txtDescription.Text;
break;
case "Keywords":
xe.Attributes["value"].Value = this.txtKWord.Text;
break;
case "Url":
xe.Attributes["value"].Value = this.txtUrl.Text;
break;
}
}
xmlDoc.Save(Server.MapPath("../web.config"));//保存
}
private_xiaojun 2008-03-11
  • 打赏
  • 举报
回复
上代码....应该是遍历你xml那一段
cheng_feng001 2008-03-11
  • 打赏
  • 举报
回复
没遇到过,没发言权
wenkekenihao 2008-03-11
  • 打赏
  • 举报
回复
把代码帖出来撤,这样说谁知道
b哈利路亚d 2008-03-11
  • 打赏
  • 举报
回复
说明不全,看不懂。
  • 打赏
  • 举报
回复
兄弟门,我的问题怎么老是没人回答呢?太简单了 ?不屑?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧