许多.NET函数使用XmlWriter输出/生成xml.输出到文件/字符串/内存是一个非常的操作:
XmlWriter xw = XmlWriter.Create(PutYourStreamFileWriterEtcHere);
xw.WriteStartElement("root");
...
Run Code Online (Sandbox Code Playgroud)
有时,您需要操作生成的Xml,因此需要将其加载到XmlDocument中,或者由于某些其他原因可能需要XmlDocument,但您必须使用XmlWriter生成XML.例如,如果您调用第三方库中的函数,该函数仅输出到XmlWriter.
您可以做的一件事是将xml写入字符串,然后将其加载到XmlDocument中:
StringWriter S = new StringWriter();
XmlWriter xw = XmlWriter.Create(S);
/* write away */
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(S.ToString());
Run Code Online (Sandbox Code Playgroud)
但是这效率很低 - 首先将所有xml信息序列化为字符串,然后再次解析字符串以创建DOM.
如何指出XmlWriter直接构建XmlDocument?
我有一个创建一些XmlDocument的函数:
public string CreateOutputXmlString(ICollection<Field> fields)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.Encoding = Encoding.GetEncoding("windows-1250");
StringBuilder builder = new StringBuilder();
XmlWriter writer = XmlWriter.Create(builder, settings);
writer.WriteStartDocument();
writer.WriteStartElement("data");
foreach (Field field in fields)
{
writer.WriteStartElement("item");
writer.WriteAttributeString("name", field.Id);
writer.WriteAttributeString("value", field.Value);
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.Flush();
writer.Close();
return builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)
我设置了一个编码,但在我创建XmlWriter后,它确实有utf-16编码.我知道这是因为字符串(和我猜想的StringBuilder)是用utf-16编码的,你无法改变它.
那么如何在编码属性设置为"windows-1250"的情况下轻松创建此xml?它甚至不必在这种编码中编码,它只需具有指定的属性.
编辑:它必须在.Net 2.0中,因此不能使用任何新的框架元素.
我想知道,是否可以在Javascript中创建包含一些数据的XML文件?我将数据存储在变量中.
我用谷歌搜索了一下,似乎并没有被人们谈论太多.我以为我可以使用XMLWriter这样的:
var XML = new XMLWriter();
XML.BeginNode ("testing");
XML.Node("testingOne");
XML.Node("TestingTwo");
XML.Node("TestingThree");
XML.EndNode();
Run Code Online (Sandbox Code Playgroud)
如本教程中所述:EHow教程
但是,当我执行此代码时,我收到以下错误:
ReferenceError: XMLWriter is not defined
Run Code Online (Sandbox Code Playgroud)
关于我如何开始这个的任何想法?
提前致谢!
我在C#中看到这两个类:XmlTextWriter和XmlWriter.任何人都可以解释差异并告诉我在哪里使用哪个?
我正在将一些数据写入XML文件...但是当我打开它时,所有的值都在一行中......如何以可读格式编写它?即新行和缩进中的每个节点?
FileStream fs = new FileStream("myfile.xml", FileMode.Create);
XmlWriter w = XmlWriter.Create(fs);
w.WriteStartDocument();
w.WriteStartElement("myfile");
w.WriteElementString("id", id.Text);
w.WriteElementString("date", dateTimePicker1.Text);
w.WriteElementString("version", ver.Text);
w.WriteEndElement();
w.WriteEndDocument();
w.Flush();
fs.Close();
Run Code Online (Sandbox Code Playgroud) 我试图使用XmlWriter写出以下元素
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
Run Code Online (Sandbox Code Playgroud)
我已经完成了第一个声明
writer.WriteStartElement("kml", "http://www.opengis.net/kml/2.2");
Run Code Online (Sandbox Code Playgroud)
如何将剩余的3个声明添加到同一个元素?
我有这种扩展方法
public static string SerializeObject<T>(this T value)
{
var serializer = new XmlSerializer(typeof(T));
var settings = new XmlWriterSettings
{
Encoding = new UTF8Encoding(true),
Indent = false,
OmitXmlDeclaration = false,
NewLineHandling = NewLineHandling.None
};
using(var stringWriter = new StringWriter())
{
using(var xmlWriter = XmlWriter.Create(stringWriter, settings))
{
serializer.Serialize(xmlWriter, value);
}
return stringWriter.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
但每当我调用它时,它都有一个utf-16指定的编码,即<?xml version="1.0" encoding="utf-16"?>.我究竟做错了什么?
默认情况下,
someXmlWriter.WriteElementString("my-tag", someString);
Run Code Online (Sandbox Code Playgroud)
产生 <my-tag />
我查看了XmlWriterSettings类,以寻找可能强制编写器生成<my-tag></my-tag>但可能没有找到任何内容的可能选项.
是否有一种简单的方法可以强制XmlWriter使用"open tag,close tag"而不是使用简写形式发布空元素?
编辑:
是的!我意识到关于XML有效性,这两个符号是等价的,有效的,所有......我正在使用遗留代码,使用Read()解析这样的XML,即在节点级别(!)并通过Read来解决问题() - 在空节点上时...
因此,我的问题来自限制此遗留代码的更改量.这个问题确实与建议的SO问题重叠; 然而,这里提供的选项都不适用于我的情况.
我正在使用XmlWriter.Create()一个编写器实例然后编写XML,但结果有<?xml version="1.0" encoding="utf-16" ?>,我怎么告诉我的xml编写器不生成它?
我正在创建一个返回XML的ASHX,但是当我这样做时它需要一条路径
XmlWriter writer = XmlWriter.Create(returnXML, settings)
Run Code Online (Sandbox Code Playgroud)
但是returnXML现在只是一个空字符串(猜测它不起作用),但是我需要将XML编写成我可以作为响应文本发送的东西.我尝试了XmlDocument,但它给了我一个错误,期待一个字符串.我在这里错过了什么?
xmlwriter ×10
c# ×6
xml ×6
.net ×3
asp.net ×1
encoding ×1
javascript ×1
namespaces ×1
xmldocument ×1