标签: xmlwriter

如何在.NET中使用XmlWriter创建XmlDocument?

许多.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?

.net xmldocument xmlwriter

47
推荐指数
3
解决办法
7万
查看次数

如何使用XmlWriter将编码属性放到utm-16的xml中?

我有一个创建一些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中,因此不能使用任何新的框架元素.

c# encoding xmlwriter

38
推荐指数
3
解决办法
3万
查看次数

在Javascript中创建XML

我想知道,是否可以在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)

关于我如何开始这个的任何想法?

提前致谢!

javascript xml xmlwriter

34
推荐指数
3
解决办法
11万
查看次数

XmlTextWriter和XmlWriter有什么区别?

我在C#中看到这两个类:XmlTextWriterXmlWriter.任何人都可以解释差异并告诉我在哪里使用哪个?

c# xml xmlwriter xmltextwriter

29
推荐指数
1
解决办法
2万
查看次数

C#中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)

c# xml xmlwriter

28
推荐指数
3
解决办法
4万
查看次数

在XmlWriter中添加多个名称空间声明

我试图使用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个声明添加到同一个元素?

xmlwriter namespaces

26
推荐指数
2
解决办法
1万
查看次数

为什么XmlWriter总是输出utf-16编码?

我有这种扩展方法

    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"?>.我究竟做错了什么?

c# xmlwriter xml-serialization

26
推荐指数
2
解决办法
2万
查看次数

我们可以强制XmlWriter发出<my-tag> </ my-tag>而不是<my-tag />吗?

默认情况下,

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问题重叠; 然而,这里提供的选项都不适用于我的情况.

.net xml xmlwriter

23
推荐指数
2
解决办法
2万
查看次数

如何使用没有声明元素的xml编写器创建xml

我正在使用XmlWriter.Create()一个编写器实例然后编写XML,但结果有<?xml version="1.0" encoding="utf-16" ?>,我怎么告诉我的xml编写器不生成它?

.net c# xml xmlwriter

21
推荐指数
2
解决办法
2万
查看次数

可以使用XmlWriter将XML写入内存吗?

我正在创建一个返回XML的ASHX,但是当我这样做时它需要一条路径

XmlWriter writer = XmlWriter.Create(returnXML, settings)
Run Code Online (Sandbox Code Playgroud)

但是returnXML现在只是一个空字符串(猜测它不起作用),但是我需要将XML编写成我可以作为响应文本发送的东西.我尝试了XmlDocument,但它给了我一个错误,期待一个字符串.我在这里错过了什么?

c# xml asp.net xmlwriter

20
推荐指数
2
解决办法
3万
查看次数