XDocument.CreateWriter 使用 XmlWriterSettings
XDocument.CreateWriter using XmlWriterSettings
我正在尝试为 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。而且,在创建之后,设置 属性 没有 setter.
如果没有办法使用 CreateWriter() 和应用设置,我还能如何完成等效的事情并最终得到相同的结果?
如果您使用 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
互动。
或者,使用 xmlwriter 的静态方法,即 create()
using (XmlWriter writer = XmlWriter.Create(filePath, settings))
{
//do your thing
}
我以前 运行 遇到过这个问题,我同意它不是很明显,尤其是在尝试做一个新的 xmlwriter 时。
编辑:也可能与 How do I set the Settings property in XmlTextWriter, so that I can write each XML attribute on its own line?
重复
如果您愿意,可以参考以进一步阅读!
我正在尝试为 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。而且,在创建之后,设置 属性 没有 setter.
如果没有办法使用 CreateWriter() 和应用设置,我还能如何完成等效的事情并最终得到相同的结果?
如果您使用 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
互动。
或者,使用 xmlwriter 的静态方法,即 create()
using (XmlWriter writer = XmlWriter.Create(filePath, settings))
{
//do your thing
}
我以前 运行 遇到过这个问题,我同意它不是很明显,尤其是在尝试做一个新的 xmlwriter 时。
编辑:也可能与 How do I set the Settings property in XmlTextWriter, so that I can write each XML attribute on its own line?
重复如果您愿意,可以参考以进一步阅读!