我尝试为XDocument创建XMLWriter,并对其应用设置,但我无法弄清楚如何。
这是我到目前为止所拥有的。
var writerSettings = new XmlWriterSettings()
{
OmitXmlDeclaration = true,
Encoding = Encoding.UTF8
};
var request = new XDocument();
using (var writer = request.CreateWriter())
{
writer.WriteStartDocument();
writer.WriteStartElement("CUSTOMER");
writer.WriteElementString("ADDRESS", "123 Fake St.");
writer.WriteElementString("CITY", "San Jose");
writer.WriteElementString("STATE", "CA");
writer.WriteEndElement();
writer.WriteEndDocument();
}
我无法弄清楚如何将writerSettings应用于编写器。 XDocument.CreateWriter()方法不会使用任何参数来指定XMLWriterSettings。并且,在创建之后,“设置”属性没有设置器。
如果没有办法使用CreateWriter()并应用设置,我怎样才能达到相同的效果,最终得到相同的结果?
答案 0 :(得分:2)
如果您使用XDocument.Save(XmlWriter)
,则可以创建自己的XmlWriter
提供XmlWriterSettings
参数,并将XDocument
的内容写入其中。
或者,您可以调用其中一个XDocument.ToString
overloads,它会从返回的字符串中省略XML声明(如果这是您想要配置的全部内容)。
您的示例在下方更新,以显示两个选项:
using System;
using System.Text;
using System.Xml;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
var request = new XDocument();
using (var writer = request.CreateWriter())
{
writer.WriteStartDocument();
writer.WriteStartElement("CUSTOMER");
writer.WriteElementString("ADDRESS", "123 Fake St.");
writer.WriteElementString("CITY", "San Jose");
writer.WriteElementString("STATE", "CA");
writer.WriteEndElement();
writer.WriteEndDocument();
}
// XDocument.ToString() will print:
//<CUSTOMER>
// <ADDRESS>123 Fake St.</ADDRESS>
// <CITY>San Jose</CITY>
// <STATE>CA</STATE>
//</CUSTOMER>
Console.WriteLine(request.ToString());
// And here's how to use the XmlWriterSettings with XDocument.Save:
var writerSettings = new XmlWriterSettings()
{
OmitXmlDeclaration = true,
Encoding = Encoding.UTF8
};
using (var writer = XmlWriter.Create("test.xml", writerSettings))
{
request.Save(writer);
}
// The above will write (you could adjust the XmlWriterSettings to add whitespace):
//<CUSTOMER><ADDRESS>123 Fake St.</ADDRESS><CITY>San Jose</CITY><STATE>CA</STATE></CUSTOMER>
}
}
或者如果您不使用XDocument
的任何其他功能,您可以首先创建自己的XmlWriter
实例,然后将节点添加到该实例,并忽略完全XDocument
互动。
答案 1 :(得分:0)
或者,使用xmlwriter的静态方法,即create()
using (XmlWriter writer = XmlWriter.Create(filePath, settings))
{
//do your thing
}
之前我遇到过这个问题并且我同意它不是很明显,尤其是在尝试创建一个新的xmlwriter时。
的副本如果您愿意,可以参考以供进一步阅读!