2

在我的 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 & Eva frisør”。

谁能告诉我如何克服这个问题。

4

3 回答 3

1

我在 fieldElement.InnerText = ...

我强烈怀疑这不是你得到错误的地方。鉴于“不能包含在名称中”的部分,我怀疑是问题所在:

fieldElement = doc.CreateElement(itemname);

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

fieldElement = doc.CreateElement("itemname");

?

于 2013-01-25T11:27:59.957 回答
1

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

元素标签区分大小写;开始和结束标签必须完全匹配。标签名称不能包含任何字符 !"#$%&'()*+,/;<=>?@[]^`{|}~,也不能包含空格字符,并且不能以 -、. 或一个数字。

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

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

fieldElement.InnerText = System.Web.HttpUtility.HtmlEncode(ds.Tables[0].Rows[j]["count"].ToString());
fieldElement1.AppendChild(fieldElement);
于 2013-01-25T11:34:18.570 回答
0

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

在将数据库文本放入元素之前,您应该对数据库文本进行 XML 编码。请参阅此问题以了解如何执行此操作。

于 2013-01-25T11:28:53.927 回答