2012-03-08 84 views
1

我使用xmlwriter创建了一个xml文件,我认为它工作正常,但是当我尝试验证它失败时,bcoz有spl字符(BOM)显示如下,刚刚通过论坛看到很多人都鼓励我使用“SecurityElement.Escape”。我不知道如何以及在哪里。有人请指导我从xml文件中移除此spl文字。如何在xml中替换或删除spl字符

<?xml version="1.0" encoding="utf-8"?> 

如果发现代码上面的符号

它看起来像&#195;&#175;&#194;&#187;&#194;&#191;&#060;

我的代码

   XmlWriter xmlWrite; 
       XmlWriterSettings settings = new XmlWriterSettings(); 
       settings.OmitXmlDeclaration = true; 
       xmlWrite = XmlWriter.Create(@"c:\test.xml",settings); 
      xmlWrite.WriteStartElement("metadata"); 
      xmlWrite.WriteElementString("story", story); 
      xmlWrite.Close(); 

我可以成功地删除版本,但仍是SPL人物的存在。我现在卡住了。

任何帮助?

这就是答案,帮我摆脱了SPL焦炭

    XmlWriter xmlWrite; 
        XmlWriterSettings settings = new XmlWriterSettings(); 
        settings.Encoding = new UTF8Encoding(false);//Thanks to DaveE 
        settings.ConformanceLevel = ConformanceLevel.Fragment; 
        settings.OmitXmlDeclaration = true; 
        xmlWrite = XmlWriter.Create(@"c:\test.xml",settings); 

上午的时候我追加使用 “使用(TextWriter的SW =新的StreamWriter(@” C:\的test.xml“))去解决它

XmlDocument doc = new XmlDocument(); 
      doc.Load(@"C:\test.xml"); 
      XmlNode newChild = doc.CreateNode(XmlNodeType.Element, "image", null); 
      var attribute = doc.CreateAttribute("name"); 
      attribute.Value = nameOnly; 
      newChild.Attributes.Append(attribute); 
      XmlNode xmlElement = doc.CreateNode(XmlNodeType.Element, "width", null); 
      xmlElement.InnerText = widthValue[1].TrimStart(); 
      newChild.AppendChild(xmlElement); 
      using (TextWriter sw = new StreamWriter(@"C:\test.xml")) 
      { 
       doc.Save(sw); 

      } 

回答

2

当你说你“试图验证它”时,你是什么意思? XML验证器不应该对BOM有任何问题。转义BOM会产生无效的XML。

如果你想给我们XMLWriterSettings,你需要创建它,设置你想要的值,然后在创建XMLWriter时使用它。 XMLWriter.Settings 只读。

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.ConformanceLevel = ConformanceLevel.Fragment; 
settings.OmitXmlDeclaration = true; 

writer = XmlWriter.Create("c:\test.xml", settings); 

这看起来不像一个正常的BOM,顺便说一句。有些字节是正确的,但里面有垃圾。系统上设置了哪些代码页?

编辑:添加编码为您的XMLWriterSettings对象:

settings.Encoding = new UTF8Encoding(false);

的 '假' 参数告诉编码不使用BOM。

+0

,感谢您的评论,我使用“http://www.xmlvalidation.com/index.php?id=1&L=0”来验证我的xml并在版本前发现了spl字符串,所以我尝试省略设置删除版本,但仍然是spl字符现在是我的根节点的前面。 – Usher 2012-03-09 01:27:37

+0

如果文件包含BOM,该工具将验证* plain xmt text *而不是xml *文件内容*。 – DaveE 2012-03-09 01:42:20

+0

你用什么来打开文件?它应该是一个纯文本编辑器,如Notepad或Notepad ++,而不是文字处理器。 – DaveE 2012-03-09 01:44:55

0

嗯,首先,即使它是不是只读,你会得到一个空引用异常,因为你不初始化xmlWrite直到第5行

  1. 创建作者(提示:第5行)
  2. 设置您不需要创建的设置。 (提示:第3行和第4行)
  3. ???
  4. 利润。
+0

我jsut更新了我的问题。我现在可以删除版本,但仍然是spl char。 – Usher 2012-03-09 00:42:00

相关问题