XmlDocument 是否可以写出这样格式的XML~~
<?xml version="1.0" encoding="utf-8"?><abc Id="aaaa" Description="bbbb" >
<sxd Id="bbbbb" Description="bbbbb">
</sxd >
</abc >
如过能写该如何写(从创建->写入) --------------------编程问答-------------------- 忘说了`非序列化 --------------------编程问答-------------------- 用XmlWriter. --------------------编程问答--------------------
--------------------编程问答-------------------- 3楼方法 可以实现! --------------------编程问答-------------------- --------------------编程问答--------------------
using System;
using System.Xml;
13namespace BH.XmlClass
14{
public class XmlItem
20 {
21 //存放孙结点名称的数组,调用时传入参数初始化孙结点
22 public string[] GrandsonNode;
23 //存放孙结点值的数组
24 public string[] GrandsonNodeValue;
25 //public string Name; //子结点
26 //public string Url; //子结点
27 //public string Img; //子结点
28 //public string Address; //子结点
29
30 public string XmlPath; //要操作的xml文件路径(绝对路径或相对路径都可以)
31 public string RootNode; //根结点名称
32 public bool IsRootAttribute; //根结点是否有属性
33
34 //根结点属性名称
35 public string[] RootAttribute;
36 //根结点属性值
37 public string[] RootAttributeValue;
38 //public string Date; //根结点属性
39 //public string Author; //根结点属性
40 //public string Description; //根结点属性
41 public string ChildNode; //根结点下的子结点名称
42
43 /**//// <summary>
44 /// 无参构造函数
45 /// </summary>
46 public XmlItem(){
47 //TODO:无参构造函数
48 }
49
50 /**//// <summary>
51 /// 初始化XML路径、根结点名称以及子结点名称的构造函数
52 /// </summary>
56 public XmlItem(string vXmlPath,string vRootNode,string vChildNode,bool vIsRootAttribute)
57 {
58 XmlPath = vXmlPath;
59 RootNode = vRootNode;
60 ChildNode = vChildNode;
61 IsRootAttribute = vIsRootAttribute;
62 }
63
64 /**//// <summary>
65 /// 初始化孙结点名称的构造函数
66 /// </summary>
67 /// <param name="vGrandsonNode">孙结点名称数组</param></param>
68 public XmlItem(string[] vGrandsonNode){
69 GrandsonNode = new string[vGrandsonNode.Length];
70 for(int i=0;i < GrandsonNode.Length;i++){
71 GrandsonNode[i] = vGrandsonNode[i];
72 }
73 }
74
75 /**//// <summary>
76 /// 初始化根结点属性名称的构造函数
77 /// </summary>
78 /// <param name="vRootAttribute">属性名称数组</param>
79 public XmlItem(string[] vRootAttribute){
80 RootAttribute = new string[vRootAttribute.Length];
81 for(int i=0;i < RootAttribute.Length;i++){
82 RootAttribute[i] = vRootAttribute[i]
83 }
84 }
85 }
86 #endregion
87
88 /**//// <summary>
89 /// 数据操作类,只能对简单的xml数据表结构操作
90 /// XML文件原型:1、只有一个根结点。2、根结点可以带属性。
91 /// 3、子结点标识必须相同。4、子结点和孙结点都不带属性
92 /// </summary>
93 public class XmlOprator
94 {
95 /**//// <summary>
96 /// 添加一个新的XML结点
97 /// </summary>
98 /// <param name="vXmlItem">结点信息对象</param>
99 public void AddXml(XmlItem vXmlItem)
100 {
101 XmlDocument XmlDoc = new XmlDocument();
102 XmlDoc.Load(vXmlItem.XmlPath);
103 //
104 //TODO:查找根结点
105 //
106 XmlNode root = XmlDoc.SelectSingleNode(vXmlItem.RootNode);
107 if(vXmlItem.IsRootAttribute){
108 //添加根结点属性
109 XmlElement xe = (XmlElement)root;
110 for(int i=0;i < vXmlItem.RootAttribute.Length;i++){
111 xe.SetAttribute(vXmlItem.RootAttribute[i], vXmlItem.RootAttributeValue[i]);
112 }
113 //xe.SetAttribute("Date",vXmlItem.Date);
114 //xe.SetAttribute("Author",vXmlItem.Author);
115 //xe.SetAttribute("Description",vXmlItem.Description);
116 }
117 else
118 {
119 //添加根结点的子结点
120 XmlElement xe = XmlDoc.CreateElement(vXmlItem.ChildNode);
121
122 for(int i=0;i < vXmlItem.GrandsonNode.Length;i++){
123 XmlElement xeSub1 = XmlDoc.CreateElement(vXmlItem.GrandsonNode[i]);
124 xeSub1.InnerText = vXmlItem.GrandsonNodeValue[i];
125 xe.AppendChild(xeSub1);
126 }
127
128 /**//*//xe的第一个子结点
129 XmlElement xeSub1 = XmlDoc.CreateElement("Name");
130 xeSub1.InnerText = vXmlItem.Name;
131 xe.AppendChild(xeSub1);
132 //xe的第二个子结点
133 XmlElement xeSub2 = XmlDoc.CreateElement("Url");
134 xeSub2.InnerText = vXmlItem.Url;
135 xe.AppendChild(xeSub2);
136 //xe的第三个子结点
137 XmlElement xeSub3 = XmlDoc.CreateElement("Img");
138 xeSub3.InnerText = vXmlItem.Img;
139 xe.AppendChild(xeSub3);
140 //xe的第四个子结点
141 XmlElement xeSub4 = XmlDoc.CreateElement("Address");
142 xeSub4.InnerText = vXmlItem.Address;
143 xe.AppendChild(xeSub4);*/
144
145 root.AppendChild(xe);
146 XmlDoc.Save(vXmlItem.XmlPath);
147 }
148 }
149
150 /**//// <summary>
151 /// 编辑结点信息
152 /// </summary>
156 public void EditXml(XmlItem vXmlItem,int Index,string WhereStr)
157 {
158 XmlDocument XmlDoc = new XmlDocument();
159 XmlDoc.Load(vXmlItem.XmlPath);
160
161 XmlNodeList xnl = XmlDoc.SelectSingleNode(vXmlItem.RootNode).ChildNodes;
162 foreach(XmlNode xn in xnl){
163 XmlElement xe = (XmlElement)xn;
164 if(xe.ChildNodes[Index].InnerText==WhereStr){
165 for(int i=0;i < vXmlItem.GrandsonNode.Length;i++){
166 xe.ChildNodes[i].InnerText = vXmlItem.GrandsonNodeValue[i];
167 }
168 /**//*xe.ChildNodes[0].InnerText = vXmlItem.Name;
169 xe.ChildNodes[1].InnerText = vXmlItem.Url;
170 xe.ChildNodes[2].InnerText = vXmlItem.Img;
171 xe.ChildNodes[3].InnerText = vXmlItem.Address;*/
172 }
173 }
174 XmlDoc.Save(vXmlItem.XmlPath);
175 }
176
177 /**//// <summary>
178 /// 删除XML指定结点,孙结点的索引作为条件
179 /// </summary>
180 /// <param name="vXmlItem">结点信息对象</param>
181 /// <param name="Index">孙结点的索引</param>
182 /// <param name="WhereStr">和索引对应的条件</param>
183 public void DeleteXml(XmlItem vXmlItem,int Index,string WhereStr)
184 {
185 XmlDocument XmlDoc = new XmlDocument();
186 XmlDoc.Load(vXmlItem.XmlPath);
187
188 XmlNodeList xnl = XmlDoc.SelectSingleNode(vXmlItem.RootNode).ChildNodes;
189 //按照孙结点的索引循环查找指定结点删除
190 foreach(XmlNode xn in xnl){
191 XmlElement xe = (XmlElement)xn;
192 if(xe.ChildNodes[Index].InnerText==WhereStr){
193 XmlDoc.SelectSingleNode(vXmlItem.RootNode).RemoveChild(xe);
194 }
195 }
196 XmlDoc.Save(vXmlItem.XmlPath);
197 }
198
199 public void DeleteXml(XmlItem vXI,string vGrandsonNode,string WhereStr){
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(vXI.XmlPath);
XmlNodeList xnl = XmlDoc.SelectSingleNode(vXI.RootNode).ChildNodes;
foreach(XmlNode xn in xnl){
XmlElement xe = (XmlElement)xn;
if(xe.GetElementsByTagName(vGrandsonNode)[0].InnerText==WhereStr){
XmlDoc.SelectSingleNode(vXI.RootNode).RemoveChild(xe);
}
}
XmlDoc.Save(vXI.XmlPath);
}
}
}
--------------------编程问答-------------------- xmlDocument读取查询的时候方便
System.Xml.XmlWriter xw = System.Xml.XmlWriter.Create("C:\\t.xml");
xw.WriteStartDocument();
xw.WriteStartElement("abc");
xw.WriteAttributeString("Id", "aaaa");
xw.WriteAttributeString("Description", "bbbb");
xw.WriteStartElement("sxd");
xw.WriteAttributeString("Id", "bbbbb");
xw.WriteAttributeString("Description", "bbbbb");
xw.WriteEndElement();
xw.WriteEndElement();
xw.Close();
写的话最好用XmlWriter
6楼的就可以 --------------------编程问答-------------------- 用XmlDocument来写大概是这样:
XmlDocument xd=new XmlDocument();
xd.Load("//你的测试XML文档");
XmlElement root=xd.CreateElement();
XmlElement sdx=xd.CreateElement();
XmlAttribute xa_rootid=xd.CreateAttribute();
XmlAttribute xa_rootdesc=xd.CreateAttribute();
XmlAttribute xa_sdxid=xd.CreateAttribute();
XmlAttribute xa_sdxdesc=xd.CretaeAttribute();
root.Name="abc";
root.InnerText="";
sdx.Name="sdx";
xa_rootid.Name="Id";
xa_rootid.Value="aaaa";
xa_rootdesc.Name="Description";
xa_rootdesc.Value="bbbb";
root.Attributes.Add(xa_rootid);
root.Attributes.Add(xa_rootdesc);
xa_sdxid.Name="Id";
xa_sdxid.Value="bbbbb";
xa_sdxdesc.Name="Description";
xa_sdxdesc.Value="bbbbb";
sdx.Attributes.Add(xa_sdxid);
sdx.Attributes.Add(xa_sdxdesc);
root.AppendChild(sdx);
xd.AppendChild(root);
//可见使用XmlDocument处理还是很烦的... --------------------编程问答-------------------- 我上面多写了xd.Load(//...); --------------------编程问答-------------------- xmlDocument的例子,可以参考一下: http://blog.csdn.net/cds27/archive/2008/04/18/2305166.aspx --------------------编程问答-------------------- 最后用xd.Save(//...)把写的东西从内存保存到,流或直接到硬盘上的文件. --------------------编程问答--------------------
System.Xml.XmlWriter xw = System.Xml.XmlWriter.Create("C:\\t.xml");--------------------编程问答--------------------
xw.WriteStartDocument();
xw.WriteStartElement("abc");
xw.WriteAttributeString("Id", "aaaa");
xw.WriteAttributeString("Description", "bbbb");
xw.WriteStartElement("sxd");
xw.WriteAttributeString("Id", "bbbbb");
xw.WriteAttributeString("Description", "bbbbb");
xw.WriteEndElement();
xw.WriteEndElement();
xw.Flush();
xw.Close();
补充:.NET技术 , C#