【问题标题】:XmlElement with special character in innertext内部文本中具有特殊字符的 XmlElement
【发布时间】:2013-01-25 19:37:10
【问题描述】:

在我的 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”。

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

【问题讨论】:

  • & 和 ` `(空格) 对 xml 元素无效

标签: c# xml xml-parsing


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 我收到 itemname="Adam & Eva frisør".. 这个字符串必须创建为 xmlelemnt.here 我收到错误。
  • 您的问题可能是我描述的第一个问题。您在 itemname 中使用了无效字符。不能有空格或&。不确定特殊字符 ø,但它是 Unicode 字符,应该可以接受。替换或删除 itemname 中的特殊字符,或重新编写 xml 以使其值为属性值或节点的内容。
【解决方案2】:

我在 fieldElement.InnerText = ... 中遇到错误的地方...

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

fieldElement = doc.CreateElement(itemname);

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

fieldElement = doc.CreateElement("itemname");

?

【讨论】:

  • 我收到 itemname="Adam & Eva frisør".. 这个字符串必须创建为 xmlelemnt。这里我遇到了错误。
【解决方案3】:

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

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

【讨论】:

  • 我收到 itemname="Adam & Eva frisør".. 这个字符串必须创建为 xmlelemnt.here 我收到错误。
  • @user642378:了解。 & 在属性值或元素中是非法的。
猜你喜欢
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 2011-04-11
  • 2012-09-07
  • 2015-05-15
  • 2020-11-12
相关资源
最近更新 更多