我正在尝试从C#
中的某些数据导出xmlXDocument doc = XDocument.Parse(xml);
保存XML后,我发现XML包含
<?xml version="1.0" encoding="utf-8"?>
我根本没有进入,导致如下问题。
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="..\..\dco.xsl"?>
<S>
<B>
</B>
</S>
我不希望第一行出现,有什么想法吗? 谢谢你的回复。
答案 0 :(得分:2)
如果我理解正确,您需要一个没有标题的XML文件。看看this answer。
基本上,您需要初始化XmlWriter
和XmlWriterSettings
类,然后致电doc.Save(writer)
。
答案 1 :(得分:2)
其PI(处理指令)是必需的,包含处理xml文件时使用的重要信息。
在编写xml文件时尝试此操作:
XmlWriter w;
w.Settings = new XmlWriterSettings();
w.Settings.ConformanceLevel = ConformanceLevel.Fragment;
w.Settings.OmitXmlDeclaration = true;
Omitting XML processing instruction when serializing an object
答案 2 :(得分:1)
你所说的是“AFTER”你用字符串解析,如上所示你的结果包含重复的声明?
现在我不确定你是如何保存你的回复的,但这是一个产生类似结果的示例应用程序。
XDocument doc = XDocument.Parse("<?xml-stylesheet type=\"text/xsl\" href=\"dco.xsl\"?><S><B></B></S>");
doc.Save(Console.OpenStandardOutput());
产生结果:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="dco.xsl"?>
<S>
<B></B>
</S>
你遇到的问题是什么。您需要在保存之前删除xml声明。这可以通过在保存xml输出时使用xml writer来完成。下面是带有扩展方法的示例应用程序,用于在没有声明的情况下编写新文档。
class Program
{
static void Main(string[] args)
{
XDocument doc = XDocument.Parse("<?xml-stylesheet type=\"text/xsl\" href=\"dco.xsl\"?><S><B></B></S>");
doc.SaveWithoutDeclaration(Console.OpenStandardOutput());
Console.ReadKey();
}
}
internal static class Extensions
{
public static void SaveWithoutDeclaration(this XDocument doc, string FileName)
{
using(var fs = new StreamWriter(FileName))
{
fs.Write(doc.ToString());
}
}
public static void SaveWithoutDeclaration(this XDocument doc, Stream Stream)
{
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(doc.ToString());
Stream.Write(bytes, 0, bytes.Length);
}
}