2013-01-25 173 views
1

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

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); 作为''字符,十六进制值0x20,不能包含在名称中。 而抛出异常的字符串是“Adam & Evafrisør”。

谁能告诉我如何解决这个问题。

+0

'&'和''(空格)将不会对xml元素有效 – V4Vendetta

回答

0

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

元素标签区分大小写;开始和结束标签必须与 完全匹配。 “#$%&'()* +,/; < =>?@ [] ^`{|}〜,也不是空格字符,并且不能使用 - ,。开始 。 ,或者数字位数。

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

其次,你是不是逃避的内容您引用的文本包含非转义的&。这导致了您正在获得的实际错误。使用您用于元素文本的元素名称的相同转义方法。

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

我收到itemname =“Adam&Evafrisør”..此字符串必须创建为xmlelemnt.here,我收到错误。 – user642378

+1

您的问题可能是我描述的第一个项目。您在'itemname'中使用无效字符。你不能有空格或'&'。不确定特殊字符“ø”,但它是一个Unicode字符,应该是可以接受的。替换或删除项目名称中的特殊字符,或重新制作xml,以使该值为节点的属性值或内容。 – Kami

1

我在哪里在fieldElement.InnerText收到错误= ...

我强烈怀疑这是不是哪里你得到错误。鉴于它说“不能被包含在一个名为”部分,我怀疑这问题:

fieldElement = doc.CreateElement(itemname); 

它的优良有任意的文本文字,但不是作为一个元素名称。想要从数据创建元素名称也很不寻常。你确定你不想要类似的东西:

fieldElement = doc.CreateElement("itemname"); 

+0

我收到itemname =“Adam&Evafrisør”..此字符串必须创建为xmlelemnt.here,我收到错误。 – user642378

0

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

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

+0

我收到itemname =“Adam&Evafrisør”..此字符串必须创建为xmlelemnt.here,我收到错误。 – user642378

+1

@ user642378:理解。 '&'在属性值或元素中是非法的。 –