有些时候我们需要生成一个xml文档作为数据交换的容器。当然我们用拼接字符串的方法来进行构建xml,但是这种方法虽然简单有效,但是如果xml文档结构过于复杂,拼接字符串会让人眼花缭乱。这时候就需要C#给我们提供现成的类库,以供我们自由的创建xml文档。

比如我们要创建如下的xml文档

<?xml version="1.0" encoding="UTF-8"?>
<ns0:Z_AVS_UPLOAD_WEIGHT_Request xmlns:ns0="http://schemas.microsoft.com/BizTalk/2003">
<ZWERKS>ZFM1</ZWERKS>
<TAB1>
<ZNO>13022101</ZNO>
<ZORDER>2013238955</ZORDER>
<ZWEIGHT>4140</ZWEIGHT>
</TAB1>
<TAB1>
<ZNO>13022101</ZNO>
<ZORDER>2013239627</ZORDER>
<ZWEIGHT>4140</ZWEIGHT>
</TAB1>
</ns0:Z_AVS_UPLOAD_WEIGHT_Request>

选取这样的结构,一方面是因为它来自于论坛某位坛友实际的需求,另一方面它足够简单却有代表性。

下面我将以这个例子用两种方法(XmlDocument和Linq to XML)进行讲解。

1、XmlDocument

            XmlDocument document = new XmlDocument();

            XmlDeclaration declaration = document.CreateXmlDeclaration("1.0", "UTF-8", "");//xml文档的声明部分
document.AppendChild(declaration); XmlElement root = document.CreateElement("ns0", "Z_AVS_UPLOAD_WEIGHT_Request", "http://schemas.microsoft.com/BizTalk/2003");
document.AppendChild(root); XmlElement zwerks = document.CreateElement("ZWERKS");
zwerks.InnerText = "ZFM1";
root.AppendChild(zwerks); XmlElement tab1 = document.CreateElement("TAB1");
root.AppendChild(tab1); XmlElement zno = document.CreateElement("ZNO");
zno.InnerText = "";
tab1.AppendChild(zno); XmlElement zorder = document.CreateElement("ZORDER");
zorder.InnerText = "";
tab1.AppendChild(zorder); XmlElement zweight = document.CreateElement("ZWEIGHT");
zweight.InnerText = "";
tab1.AppendChild(zweight); XmlElement tab2 = document.CreateElement("TAB1");
root.AppendChild(tab2); XmlElement zno2 = document.CreateElement("ZNO");
zno2.InnerText = "";
tab2.AppendChild(zno2); XmlElement zorder2 = document.CreateElement("ZORDER");
zorder2.InnerText = "";
tab2.AppendChild(zorder2); XmlElement zweight2 = document.CreateElement("ZWEIGHT");
zweight2.InnerText = "";
tab2.AppendChild(zweight2); document.Save("test.xml");//将生成好的xml保存到test.xml文件中

2、Linq to XML

            XDocument document = new XDocument();
document.Declaration = new XDeclaration("1.0", "UTF-8", ""); XNamespace ns = "http://schemas.microsoft.com/BizTalk/2003"; XElement root = new XElement(ns + "Z_AVS_UPLOAD_WEIGHT_Request",
new XAttribute(XNamespace.Xmlns + "ns0", "http://schemas.microsoft.com/BizTalk/2003")); root.Add(new XElement("ZWERKS", "ZFM1"),
new XElement("TAB1",
new XElement("ZNO", ),
new XElement("ZORDER", ),
new XElement("ZWEIGHT", )),
new XElement("TAB1",
new XElement("ZNO", ),
new XElement("ZORDER", ),
new XElement("ZWEIGHT", ))
); document.Add(root);
document.Save("test.xml");//保存xml到文件

可以发现Linq to XML的方法比较简洁,代码量也足够小。当然了XmlDocument的方法可以进一步的简化,这里重点展示一下Linq to XML的魅力。如上只当给需要的朋友提供一下思路和解决方案。关于Linq to xml的更多信息可以参考:XNamespace

再提供一个例子:

有a.xml:

<a>
<xingming>
<item>
<name>张三</name>
<code>1</code>
</item>
<item>
<name>李四</name>
<code>2</code>
</item>
<item>
<name>王五</name>
<code>3</code>
</item>
<item>
<name>赵四</name>
<code>4</code>
</item>
<item>
<name>王二麻子</name>
<code>5</code>
</item>
</xingming>
<nianji>
<item>
<name>一年级</name>
<banji>一班</banji>
</item>
</nianji>
</a>

想转换成b.xml:

<b>
<xingming>
<items>
<item>
<Xingname1>张三</Xingname1>
<Xingcode1>1</Xingcode1>
<Xingname2>李四</Xingname2>
<Xingcode2>2</Xingcode2>
</item>
<item>
<Xingname1>王五</Xingname1>
<Xingcode1>3</Xingcode1>
<Xingname2>赵四</Xingname2>
<Xingcode2>4</Xingcode2>
</item>
<item>
<Xingname1>王二麻子</Xingname1>
<Xingcode1>5</Xingcode1>
</item>
</items>
</xingming>
<nianji>
<item>
<name>一年级</name>
<name>一班</name>
</item>
</nianji>
</b>

代码如下:

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml = @"<a>
<xingming>
<item>
<name>张三</name>
<code>1</code>
</item>
<item>
<name>李四</name>
<code>2</code>
</item>
<item>
<name>王五</name>
<code>3</code>
</item>
<item>
<name>赵四</name>
<code>4</code>
</item>
<item>
<name>王二麻子</name>
<code>5</code>
</item>
</xingming>
<nianji>
<item>
<name>一年级</name>
<banji>一班</banji>
</item>
</nianji>
</a>"; XmlDocument newXmlDoc = new XmlDocument();
XmlElement b = newXmlDoc.CreateElement("b");
newXmlDoc.AppendChild(b); XmlElement xingming = newXmlDoc.CreateElement("xingming");
b.AppendChild(xingming); XmlElement items = newXmlDoc.CreateElement("items");
xingming.AppendChild(items); XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml); XmlElement item = null; //直接定位到/a/xingming节点下的子节点
var nodes = xmlDoc.SelectSingleNode("/a/xingming").ChildNodes; for (int i = ; i < nodes.Count; i++)
{
XmlNode node = nodes.Item(i); //节点项为偶数时,创建item节点
if (i % == )
{
item = newXmlDoc.CreateElement("item");
items.AppendChild(item);
} //item节点追加Xingname节点
XmlElement Xingname = newXmlDoc.CreateElement("Xingname" + (i % + ));
Xingname.InnerText = node.SelectSingleNode("name").InnerText;
item.AppendChild(Xingname); //item节点追加Xingcode节点
XmlElement Xingcode = newXmlDoc.CreateElement("Xingcode" + (i % + ));
Xingcode.InnerText = node.SelectSingleNode("code").InnerText;
item.AppendChild(Xingcode); } XmlElement nianji = newXmlDoc.CreateElement("nianji");
b.AppendChild(nianji); XmlElement item1 = newXmlDoc.CreateElement("item");
nianji.AppendChild(item1); XmlElement name = newXmlDoc.CreateElement("name");
name.InnerText = xmlDoc.SelectSingleNode("/a/nianji/item/name").InnerText;
item1.AppendChild(name); XmlElement banji = newXmlDoc.CreateElement("name");
banji.InnerText = xmlDoc.SelectSingleNode("/a/nianji/item/banji").InnerText;
item1.AppendChild(banji); newXmlDoc.Save("b.xml");
}
}
}

再附一个例子,生成指定格式的xml文档:

<?xml version="1.0" encoding="utf-8"?>
<response>
<code>0</code>
<date_list>
<godate>2017-08-09</godate>
<godate>2017-08-19</godate>
</date_list>
</response>

代码如下:

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
response r = new response()
{
code = ,
date_list = new date_list()
{
godate = new string[]
{
"2017-08-09",
"2017-08-19"
}
}
};
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", ""); XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.Indent = true; XmlWriter writer = XmlWriter.Create("test.xml", settings);
XmlSerializer s = new XmlSerializer(typeof(response));
s.Serialize(writer, r, ns);
writer.Close();
}
} [Serializable]
public class response
{
public int code { get; set; }
public date_list date_list { get; set; }
} [Serializable]
public class date_list
{
[XmlElement("godate")]
public string[] godate { get; set; }
}
}

C# 创建XML文档的更多相关文章

  1. 使用LINQ TO XML 创建xml文档,以及读取xml文档把内容显示到GridView例子

    首先,准备了一个Model类 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  2. PHP中利用DOM创建xml文档

    DOM创建xml文档 用dom创建如下文档: <booklist> <book id="1"> <title>天龙八部</title> ...

  3. 【Python】创建xml文档

    #练习:创建xml文档 import xml.dom.minidom import codecs   #在内存中创建一个空的文档 doc = xml.dom.minidom.Document()   ...

  4. 使用Dom4j创建xml文档

    我们学习dom4j为的就是使用它来创建XML文档.读取文档等更为方便,下面通过一个实例来展示如何通过dom4j去创建XML文档.展示怎样通过两种方式去创建元素,可以直接通过addElement方法返回 ...

  5. 字符串创建XML文档

    创建XML文档,方法与形式是多样的,下面Insus.NET再例举两种,可供参考. XmlDocument(namespace:System.Xml)在实例化之后,它有一个方法LoadXml(),可以把 ...

  6. 自动创建xml文档

    自动创建xml文档 import xml.etree.ElementTree as ET print(dir(ET)) #ET里面有Element方法 root = ET.Element(" ...

  7. Java四种读取和创建XML文档的例子教程

    四种方法解析XML文档:Dom.SAX.JDOM.dom4j          1.了解XML XML,即可扩展标记语言(Extensible Markup Language),标准通用标记语言的子集 ...

  8. 代码创建xml文档并写入指定节点

    //首先创建 XmlDocument xml文档 XmlDocument xml = new XmlDocument(); //创建根节点 config XmlElement config = xml ...

  9. 怎样创建XML文档

    在程序中,我们怎样创建一个XML文档.下面演示中,Insus.NET在程序创建一个和http://www.cnblogs.com/insus/p/3274220.html 一模一样的XML文档. 可以 ...

随机推荐

  1. Redis的Time Event与File Event的微妙关系

    redis里设计了两类事件,一类是file event,一类是time event. 其中file event主要为网络事件而设计,而time event为一些后台事件设计. 在两类事件的管理设计上, ...

  2. MFC——从实现角度分析微云界面

    在云计算时代之风吹来,很多互联网公司都在建云,提出云盘.云储存.云平台.云空间等等,骤然间,天下皆云.云是啥?有用户量,就有云,没有用户量,你的系统,你的云,也就是一朵白云. 最近研究了下微云的界面, ...

  3. JavaScript标准Selection操作

    简介 术语 属性 方法 document.activeElement document.designMode = 'on'; 简介 selection是对当前激活选中区(即高亮文本)进行操作. 在非I ...

  4. codereview介绍

    1. 定义: Code review is systematic examination (often known as peer review) of computer source code. I ...

  5. xss脚本攻击

    xss脚本攻击不仅仅只是alert(1)就算完了,xss脚本攻击真正的用处是盗取普通用户的cookie,或者盗取管理员的cookie. xss分类(类型): 1. 反射型xss2. 存储型xss3. ...

  6. PHP加速器

    转http://www.vpser.net/opt/apc-eaccelerator-xcache.html 一.PHP加速器介绍         PHP加速器是一个为了提高PHP执行效率,从而缓存起 ...

  7. 西门子PLC两线制,四线制

    1 一.对于控制系统模块:两线制,四线制信号都只有两根线接入模件,区别在于: 两线制信号的这两根线一正一负,不带提供信号电流,而且提供供电电压:一般流量,压力,液位等等的信号常用两线制信号,但也要根据 ...

  8. Logstash conf.d 多个配置文件

    概要 今天在群里一个关于在 logstash 的配置目录存在多个配置文件时候如何处理的问题? 我说是加载所有配置文件并合并为一个. lcy@lcy:~/ELK/logstash$ sudo /opt/ ...

  9. sql server 表变量、表类型、临时表

    sql server 中临时表分为会话临时表和永久临时表.会话临时表在会话结束后自动被删除,永久临时表与基本表的使用上基本无差异,需要显示调用drop将其删除. 创建临时表 创建会话临时表 creat ...

  10. Google搜索技术

    命令 双引号 把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配.bd和Google都支持这个指令. 减号 减号代表搜索不包含减号后面的 ...