在innertext中具有特殊字符的XmlElement

时间:2013-01-25 11:25:40

标签: c# xml xml-parsing

在我的c#应用程序中,我正在根据数据库值创建一个xml。它很好,直到字符串不是特殊字符。以下是我的代码。

 XmlDocument doc = new XmlDocument();
 XmlElement element = doc.CreateElement("NewDataSet");
  ------
 string itemname =System.Web.HttpUtility.HtmlEncode(ds.Tables[0].Rows[j]["itemname"].ToString());
 fieldElement = doc.CreateElement(itemname);
 fieldElement.InnerText = ds.Tables[0].Rows[j]["count"].ToString();
 fieldElement1.AppendChild(fieldElement);

我在`fieldElement = doc.CreateElement(itemname)中遇到错误; as''字符,十六进制值0x20,不能包含在名称中。 抛出异常的字符串是“Adam&Evafrisør”。

任何人都可以告诉我如何克服这个问题。

3 个答案:

答案 0 :(得分:1)

  

我在fieldElement.InnerText = ...

中收到错误

我强烈怀疑你 鉴于部分说"不能包含在名称中#34;我怀疑这个是问题所在:

fieldElement = doc.CreateElement(itemname);

没有任意文本作为文本,但不能作为元素名称。想要从数据中创建元素名称也很不寻常。你确定你不想要这样的东西:

fieldElement = doc.CreateElement("itemname");

答案 1 :(得分:1)

这里有两个可能的问题。首先,您是html编码元素名称。这将正常工作,直到元素名称包含特殊字符。

  

元素标签区分大小写;开头和结尾标签必须   完全匹配。标记名称不能包含任何字符   !“#$%&'()* +,/;< =>?@ [] ^`{|}〜,也不是空格字符,无法启动   用 - ,.或数字数字。

所以,这是一个等待发生的错误。确保名称有效且不包含任何特殊字符。

其次,您没有逃避元素的内容。您引用的文字包含未转义的&。这导致您获得的实际错误。使用与用于元素文本的元素名称相同的转义方法。

fieldElement.InnerText = System.Web.HttpUtility.HtmlEncode(ds.Tables[0].Rows[j]["count"].ToString());
fieldElement1.AppendChild(fieldElement);

答案 2 :(得分:0)

&需要转义为&,否则它是无效的XML。

在将数据库文本放入元素之前,您应该对其进行XML编码。有关如何执行此操作,请参阅this question