在我的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”。
任何人都可以告诉我如何克服这个问题。
答案 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。