我正在使用XMLDocument
在C#中读取XML文件。我的代码是这样的:
XmlDocument doc = new XmlDocument();
doc.Load(xmlSourceFile);
我的XML文档的第一行是
<?xml version="1.0" encoding="UTF-8"?>
我必须删除这一行。我该怎么办?
答案 0 :(得分:24)
我不明白你为什么要删除它。但如果需要,你可以试试这个:
XmlDocument doc = new XmlDocument();
doc.Load("something");
foreach (XmlNode node in doc)
{
if (node.NodeType == XmlNodeType.XmlDeclaration)
{
doc.RemoveChild(node);
}
}
或使用LINQ:
var declarations = doc.ChildNodes.OfType<XmlNode>()
.Where(x => x.NodeType == XmlNodeType.XmlDeclaration)
.ToList();
declarations.ForEach(x => doc.RemoveChild(x));
答案 1 :(得分:7)
我需要一个没有声明标头的XML序列化字符串,所以下面的代码对我有效。
StringBuilder sb = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings {
Indent = true,
OmitXmlDeclaration = true, // this makes the trick :)
IndentChars = " ",
NewLineChars = "\n",
NewLineHandling = NewLineHandling.Replace
};
using (XmlWriter writer = XmlWriter.Create(sb, settings)) {
doc.Save(writer);
}
return sb.ToString();
答案 2 :(得分:5)
或者你可以使用它;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
if (xmlDoc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
xmlDoc.RemoveChild(xmlDoc.FirstChild);
答案 3 :(得分:1)
我理解消除XML声明的必要性;我正在编写一个改变应用程序preferences.xml
内容的脚本,如果声明存在,应用程序无法正确读取文件(不确定开发人员决定的原因)省略XML声明。)
我不再是乱用XML,而是创建了一个removeXMLdeclaration()
方法来读取XML文件并删除第一行,然后使用streamreaders / writers重写它。它的闪电速度很快,效果很好!在我完成所有XML更改以便一劳永逸地清理文件之后,我只是调用该方法。
以下是代码:
public void removeXMLdeclaration()
{
try
{
//Grab file
StreamReader sr = new StreamReader(xmlPath);
//Read first line and do nothing (i.e. eliminate XML declaration)
sr.ReadLine();
string body = null;
string line = sr.ReadLine();
while(line != null) // read file into body string
{
body += line + "\n";
line = sr.ReadLine();
}
sr.Close(); //close file
//Write all of the "body" to the same text file
System.IO.File.WriteAllText(xmlPath, body);
}
catch (Exception e3)
{
MessageBox.Show(e3.Message);
}
}
答案 4 :(得分:1)
一种非常快速,简便的解决方案是使用XmlDocument
类的this links属性:
XmlDocument doc = new XmlDocument();
doc.Load(xmlSourceFile);
Console.Out.Write(doc.DocumentElement.OuterXml);
答案 5 :(得分:0)
还有另一种关闭此文件使用文件流的方法。
public void xyz ()
{
FileStream file = new FileStream(xmlfilepath, FileMode.Open, FileAccess.Read);
XmlDocument doc = new XmlDocument();
doc.load(xmlfilepath);
// do whatever you want to do with xml file
//then close it by
file.close();
File.Delete(xmlfilepath);
}