2012-03-02 80 views
1

我从varchar column读取XML数据在SQL db,为linq to sql XElement,属于一个XDocument如何XDocument.Save写作逃逸字符

当我执行XDocument.Save方法,XML被写入文件,但包括转义字符。例如。 ">"改为"&gt"
有一种简单的方法来防止这种情况?

+0

但是这不会使它不是XML吗? – kenny 2012-03-02 12:55:56

+0

这很不清楚,确定它被骗了。什么是不明显的是为什么这是一个问题或逃脱发生的可能性很早发生,当数据插入到数据库表中。 – 2012-03-02 13:48:06

回答

2

首先,似乎没有理由阻止它。像肯尼提到的,除非特殊字符是XML编码的,没有解析器将能够解析产生XML(因为“<”或“>”字符意味着很多对于解析器)。其次,当你的解析器解码XML(例如你打电话XElement.Value),所有的特殊字符将被转换回到了他们最初。最后,如果你想保留原始的字符串(例如比XML解析其他目的),你可以使用CDATA,这在Linq2XML的情况下,由XCData类来表示。

编辑:正如Rob指出的那样,我可能弄错了。如果要保存将现有的XML保存到文档中,而不显示特殊字符,请使用以下代码:

XDocument document = new XDocument(); 
var xmlFromDb = "<xml>content</xml>"; 
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(xmlFromDb))) 
{ 
    using (var reader = XmlReader.Create(stream)) { 
      reader.MoveToContent(); 
      document.Add(XElement.ReadFrom(reader)); 
    } 
} 
+1

我想你可能会错过这一点。源xml位于数据库中,但在插入文档时会被转义。 OP想要插入这个作为XML,而不是“内容” – 2012-03-02 13:21:15

+0

感谢您的评论。 – 2012-03-02 13:38:53

+0

感谢user375487,完美的工作! – 2012-03-02 15:27:47