使用xmlwriter创建一个xml文件,我认为它工作正常但是当我尝试验证它失败bcoz有下面的spl字符(BOM),刚刚通过论坛看到很多人都喜欢我使用“SecurityElement 。逃逸”。我不确定如何以及在哪里。有人请指导我从xml文件中删除这个spl charecter。
<?xml version="1.0" encoding="utf-8"?>
如果找到上述符号的代码
看起来像<
我的代码
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);
}
答案 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行。