2012-08-08 78 views
0
HttpContext.Current.Response.ContentType = "text/xml"; 
HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; 

HttpPostedFile file = HttpContext.Current.Request.Files[0]; 

// If file.InputSteam contains an "&", exception is thrown 
XDocument doc = XDocument.Load(XmlReader.Create(file.InputStream)); 

HttpContext.Current.Response.Write(doc); 

时有没有办法生成XML文档之前更换&&?只要文件包含&,我当前的代码就会崩溃。删除“和”从输入流生成XML

感谢

+0

'&'表示一个字符引用的开始,如果后面的内容不是一个有效的引用,那么XML解析器应该抛出一个异常。听起来像你的问题是人们提交的不是XML的东西。不要丢弃数据位,捕获异常并向上传器返回错误消息。 – Quentin 2012-08-08 08:45:44

回答

2

你的代码,如果它不是有效的XML只会崩溃。举例来说,这应该是罚款:

<foo>A &amp; B</foo> 

如果你已经实际上

<foo>A & B</foo> 

那么你没有得到的XML文件。你可能有些东西看起来有点像XML,但它不是真正有效的XML。

这里最好的办法不是即时转换数据 - 这是为了修复数据的,以便它是真正的XML。在当今这个时代,任何产生无效XML的东西都是没有借口的。

此外,没有理由在这里使用XmlReader.Create - 只需使用

XDocument doc = XDocument.Load(file.InputStream); 
+0

是否有其他字符,但我应该知道的'&'?由于它基于用户在文本字段中的输入,因此可能会出现像'&'这样的字符。但我想最好的方法是在生成xml之前对输入字段进行htmlencode编码? – Johan 2012-08-08 08:51:43

+1

@Johan:这个XML是如何生成的?这听起来像你可能使用字符串连接... **不要**。使用XML API来生成文件,并且它会很好。你应该在这里提供更多关于大局的更多背景。 – 2012-08-08 08:53:38

+0

xml是使用JSON.NET从json字符串生成的。 json对象本身包含来自html表单的输入数据。 – Johan 2012-08-08 08:59:49

0

您可以使用 “&放大器;”以逃脱“&”。

在xml文件中,有一些字符应该被转义。

& ---- &amp; 

< ---- &lt; 

> ---- &gt; 

" ---- &quot; 

' ---- &apos;