如何格式化字符串的xml?
如何格式化字符串的xml?
【问】xml的标准形式是:
<Root>
<Name>John</Name>
<Age>16</Age>
</Root>
现在假如是一个字符串的形式——
<Root><Name>John</Name><Age>16</Age></Root>
请教如何对该字符串格式化,以便成为标准的xml文件格式?
【错误回答】
直接使用XmlDocument的LoadXml方法,然后输出保存到一个新的xml文档中。
【正解】
XmlDocument是存储以及对xml文件操作的一个.NET基本类型。除了对xml进行增删改查之外还可以直接对xml文件进行格式化操作。XmlDocument其中自带一个方法“WriteTo”,该方法需要一个继承TextWriter类的子类。针对xml文件,应该选用XmlTextWriter;XmlTextWriter又需要一个StringWriter流,而StringWriter需要一个Stream对象。恰巧StringBuilder是实现了Stream抽象类的子类。因此可以被使用。代码如下:
[C#]
XmlDocument doc = new XmlDocument();
doc.LoadXml("<Root><Name>John</Name><Age>16</Age></Root>");
StringBuilder sub = new StringBuilder();
StringWriter sw = new StringWriter(sub);
XmlTextWriter xw = new XmlTextWriter(sw);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
doc.Save("sim1.xml");
Console.WriteLine(sub);
[VB.NET]
Dim doc As New XmlDocument()
doc.LoadXml("<Root><Name>John</Name><Age>16</Age></Root>")
Dim [sub] As New StringBuilder()
Dim sw As New StringWriter([sub])
Dim xw As New XmlTextWriter(sw)
xw.Formatting = Formatting.Indented
doc.WriteTo(xw)
Console.WriteLine([sub])
值得注意的是:您必须设置XmlTextWriter的Formatting格式为Indented(锯齿,自动缩进的意思),否则仍然无法实现效果。
【总结】
1) 首先声明一个StringBuilder对象,作为目标源。
2) 其次声明一个StringWriter,作为连接该对象的“管道”(字符串“写入流”)。
3)然后声明一个XmlTextWriter,连接StringWriter(把StringWriter作为参数传入),并设置Formatting格式为Indented。
4)最后通过XmlDocument的WriteTo方法连接到XmlTextWriter即可。
【拓展】
关于“Stream”,“Reader/Writer”的“IO”探讨
众所周知,System.IO命名空间里边包括了大量支持文件、内存、网络、字符串等流写入(出)的类以及旗下方法。其主要从几个抽象类派生而成:
1)Stream:该类主要用作目标对象。一般地,微软这方面命名是:“目标对象”+Stream——
文件流:FileStream。
内存流:MemoryStream。
网络流:NetWorkStream(值得注意的是有一个类是位于System.NET.Sockets,专门用Socket或者TCP/IP等通讯发送信息时用)。
2) TextWriter:该类用于执行“写”操作,写入到指定某个继承Stream类的子类。这方面微软有对应的类:
文件、内存、网络流写入:StreamWriter。
字符串流写入:StringWriter(注意:其需要一个StringBuilder,而不是需要一个Stream子类对象作为参数)。
Xml文件流写入:XmlWriter和XmlTextWriter,前者自身是一个抽象类(不是继承TextWriter),单独也可以使用(使用Create方法,支持Stream和StringBuilder等),简单实现一些非常简单基本的xml读写操作(主要针对字符串格式的),后者继承了XmlWriter(构造函数参数支持对Stream和TextWriter子类进行写入),实现了其中所有的abstract方法,能够读写复杂的数据类型,如CData等)。同时还支持Formatting格式化,就像上面的例子。
不过有意思的在于:凡是以上类(以Writer结尾的),要写入到目标中的话必须显式调用Close或者Flush方法,否则这是驻留在内存中,不会真正写入到目标的。这也就是为什么很多时候程序没有错误,目标总是得不到的原因。
3) TextReader:该类用于执行“读”操作,读入到指定某个继承Stream类的子类。这方面微软有对应的类:
文件、内存、网络流读入:StreamReader。
字符串流读入:StringReader(注意:其需要一个string对象,而不是需要一个Stream子类对象作为参数)。
Xml文件流读入:XmlReader和XmlTextReader,前者自身是一个抽象类(不是继承TextReader),单独也可以使用(使用Create方法,支持TextReader和Stream等),简单实现一些非常简单基本的xml读写操作(主要针对字符串格式的),后者继承了XmlWriter,实现了其中所有的abstract方法,能够读写复杂的数据类型等)。
如何格式化字符串的xml?相关推荐
- xml字符串转xml对象,xml对象转json对象
xml字符串转xml对象: function loadXml(str) {if (str == null) {return null;}var doc = str;try{doc = createXM ...
- C#格式化字符串,日期,时间,货币
时间格式化 有时候我们要对时间进行转换,达到不同的显示效果 默认格式为:2005-6-6 14:33:34 如果要换成成200506,06-2005,2005-6-6或更多的该怎么办呢 我们要用 ...
- c语言解析xml字符串_Python XML解析
Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...
- 使用C++ ostringstream来格式化字符串输出
在Linux C中,我们通常使用snprintf来格式化字符串输出,但是有一个问题,就是可能会频繁申请大的缓冲区,并且无法实现字符串的动态增加,比如你定义的字符缓存为100个字节,如果你格式化以后的内 ...
- 零基础入门学习Python(14)-格式化字符串
什么是格式化字符串 格式化字符串就是按照统一的规格去输出一个字符串,如果规格不统一,就很可能造成误会 format()方法 接受位置参数和关键字参数两种参数 二者均传递到一个replacement的字 ...
- 字符串创建XML文档
创建XML文档,方法与形式是多样的,下面Insus.NET再例举两种,可供参考. XmlDocument(namespace:System.Xml)在实例化之后,它有一个方法LoadXml(),可以把 ...
- WPF中Binding使用StringFormat格式化字符串方法
原文:WPF中Binding使用StringFormat格式化字符串方法 货币格式 <TextBlock Text="{Binding Price, StringFormat={}{0 ...
- python 为什么用%格式化_Python中应该使用%还是format来格式化字符串?
原标题:Python中应该使用%还是format来格式化字符串? Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了format这个格式化字 ...
- Linux下的格式化字符串漏洞利用姿势
[转]http://www.cnblogs.com/Ox9A82/p/5429099.html linux最早的漏洞防护机制nx-stack刚刚出现后就有人想出了突破方法.那就是只有栈是不可执行,而除 ...
最新文章
- python中and与or的执行顺序-python 代码运行顺序问题?
- English sentences
- ue4 无限地图_UE4大地图(流关卡、无缝地图)
- http请求中的Query String Parameters、Form Data、Request Payload
- ArcGIS升级地理数据库
- SaltStack源码分析之:master端执行salt模块大致流程
- jquery颜色选择器
- 跨站式SQL脚本注入的技巧介绍
- Pandas库DataFrame的简单应用2
- Office 365 On MacOS 系列——安装 O365 其他组件
- 一、Java语言基础(3)_流程语句——控制循环结构语句
- Java调用网易163邮箱,发送邮件
- 闽教英语app 破解版 免费版
- 滚动轴承的代号表示方法
- Java第一天笔记01——jdk8的安装与环境变量的配置
- cad菜单栏快捷键_天正建筑菜单栏不见了怎么调出来
- Canvas绘制抽奖转盘
- 求负片灰度扩展幂律变换
- LifeSmart云起局域网直接控制向往背景音乐
- Elastic Search 深入搜索
热门文章
- 迷路在现代软件工程中的羔羊——略读邹欣老师《构建之法》及讲义有感(附上源代码管理软件以及CI/CD调研Demo)
- Attention中softmax的梯度消失及scaled原因
- 图形打印。(20分)
- 全局变量、静态全局变量、静态局部变量和普通局部变量的区别
- AI助手1.4版,需要自行准备API,供大家学习研究参考
- 机器学习综述与“Hello World”
- win7笔记本电脑如何禁用无线网络 电脑无线网卡禁用如何开启教程
- eclipse查看mysql_eclipse查看数据库
- android QMI机制---概论
- Spring boot security thymeleaf关于favicon.ico的404等问题