在内部文本中具有特殊字符的 XmlElement

本文关键字:特殊字符 XmlElement 文本 在内部 | 更新日期: 2023-09-27 17:56:04

在我的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);

我在"字段元素 = 文档"中收到错误的地方。创建元素(项名);因为 ' ' 字符(十六进制值 0x20)不能包含在名称中。抛出异常的字符串是"Adam & Eva frisør"。

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

在内部文本中具有特殊字符的 XmlElement

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

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

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

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

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

我在 fieldElement.InnerText = ...

我强烈怀疑这不是您出现错误的地方。鉴于"不能包含在名称中"的部分,我怀疑这就是问题所在:

fieldElement = doc.CreateElement(itemname);

可以将任意文本作为文本,但不能作为元素名称。 想要从数据创建元素名称也很不寻常。您确定您不想要以下内容:

fieldElement = doc.CreateElement("itemname");

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

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