如何在xml中替换或删除spl字符

时间:2012-03-08 23:21:01

标签: c#

使用xmlwriter创建一个xml文件,我认为它工作正常但是当我尝试验证它失败bcoz有下面的spl字符(BOM),刚刚通过论坛看到很多人都喜欢我使用“SecurityElement 。逃逸”。我不确定如何以及在哪里。有人请指导我从xml文件中删除这个spl charecter。

<?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 char的答案

                    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 = new 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 个答案:

答案 0 :(得分: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);

'false'参数告诉编码不要使用BOM。

答案 1 :(得分:0)

嗯,对于初学者来说,即使它不是只读的,你也会得到一个空引用异常,因为你没有初始化xmlWrite直到第5行。

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