标签:pac article oar detail 进一步 namespace app string 好的
有些时候我们需要生成一个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 = "13022101";
tab1.AppendChild(zno);
XmlElement zorder = document.CreateElement("ZORDER");
zorder.InnerText = "2013238955";
tab1.AppendChild(zorder);
XmlElement zweight = document.CreateElement("ZWEIGHT");
zweight.InnerText = "4140";
tab1.AppendChild(zweight);
XmlElement tab2 = document.CreateElement("TAB1");
root.AppendChild(tab2);
XmlElement zno2 = document.CreateElement("ZNO");
zno2.InnerText = "13022101";
tab2.AppendChild(zno2);
XmlElement zorder2 = document.CreateElement("ZORDER");
zorder2.InnerText = "2013238955";
tab2.AppendChild(zorder2);
XmlElement zweight2 = document.CreateElement("ZWEIGHT");
zweight2.InnerText = "4140";
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", 13022101),
new XElement("ZORDER", 2013238955),
new XElement("ZWEIGHT", 4140)),
new XElement("TAB1",
new XElement("ZNO", 13022101),
new XElement("ZORDER", 2013238955),
new XElement("ZWEIGHT", 4140))
);
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 = 0; i < nodes.Count; i++)
{
XmlNode node = nodes.Item(i);
//节点项为偶数时,创建item节点
if (i % 2 == 0)
{
item = newXmlDoc.CreateElement("item");
items.AppendChild(item);
}
//item节点追加Xingname节点
XmlElement Xingname = newXmlDoc.CreateElement("Xingname" + (i % 2 + 1));
Xingname.InnerText = node.SelectSingleNode("name").InnerText;
item.AppendChild(Xingname);
//item节点追加Xingcode节点
XmlElement Xingcode = newXmlDoc.CreateElement("Xingcode" + (i % 2 + 1));
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");
}
}
}
标签:pac article oar detail 进一步 namespace app string 好的
原文地址:http://www.cnblogs.com/xietianjiao/p/7049997.html