2012-03-08 81 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

相關問題