首页 > 其他分享 >xml的标准形式有哪些

xml的标准形式有哪些

时间:2022-10-27 13:32:15浏览次数:46  
标签:xml Stream 哪些 子类 XmlTextWriter 写入 StringWriter 标准


  ?

  【问】xml的标准形式是:

   John

   16

  现在假如是一个字符串的形式――

   John 16

  请教如何对该字符串格式化,以便成为标准的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(" John 16 ");

  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(" John 16 ")

  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,Stream,哪些,子类,XmlTextWriter,写入,StringWriter,标准
From: https://blog.51cto.com/yetaotao/5800913

相关文章

  • python 格式化xml字符串
    【前言】本文主要介绍python中的字符串格式化,通过基本概念,使用方法及例子学习python字符串格式化的两种主要形式:字符串格式化表达以及字符串格式化方法调用。字符串......
  • python if中的false(哪些视为False)
    标题不太合适,即表示if判断为假的情况,具体如下。在Python中所有的对象都可以进行真值测试,下面罗列一下判断为假的情况:NoneFalse数值中的零,包括0,0.0,0j(虚数)空序列,包括空字符串......
  • HTTP代理使用过程中会遇到哪些常见网站防护策略
    每当我们使用HTTP代理请求网站失败时,总会认为是HTTP代理出现故障,但检查之后又发现,代理完全正常。这种情况就有可能是我们所访问网站的防护策略被触发了,导致爬虫程序......
  • mapper.xml中的添加和修改和删除和参数传递
    一、添加1.遇到能添加但是在在数据库中并没有显示出来:是因为在以下代码中,会开启事物,要想在数据库中添加到数据,要手动提交事务,SqlSessionsqlSession=sqlSessionFacto......
  • Intellij格式化java和xml
    使用Intellij的这段时间,一直在寻找一些技巧,不断提高对它的熟练度。接下来告诉大家一个小秘密,带大家体验一下Intellij半自动格式化代码的快感。那要使用这个功能还得安装......
  • xml获取指定标签的集合
    一、pom依赖<!--dom4j的jar包--><dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId>......
  • AIR32F103(三) Linux环境基于标准外设库的项目模板
    目录AIR32F103(一)合宙AIR32F103CBT6开发板上手报告AIR32F103(二)Linux环境和LibOpenCM3项目模板AIR32F103(三)Linux环境基于标准外设库的项目模板Linux开发环境......
  • 使用ida查看这个函数调用了哪些api
    用ida查看一个函数,如这个叫getDiskInformAndSend的函数,想快速查看这个函数调用了哪些api,怎么做呢?右键点击函数名称,在选项里选择Xrefsgraphfrom(Xrefsgraphfrom表示......
  • C++标准库字符串流sstream
    sstream与strstream在C++有两种字符串流,一种在<strstream>中定义,另一种在<sstream>中定义,两者的区别如下:strstream里包含strstreambuf、istrstream、ostrstream、strst......
  • 哪些因素会影响sqlserver shrink的速度
    以下因素会严重影响sqlserver文件收缩的时间。1.LOB数据所谓LOB数据,指的是任何大值数据类型(如text、image、varchar(max)、XML)。这里的问题在于存储LOB值的方式,他们通......