在.net的XML中dataset和XmlDocument好像不能很好的兼容
在.net中操作XML有2种方式:
1、DataSet方式:
DataSet ds=new DataSet();
ds.ReadXml(Page.MapPath("Common\\New.xml"));
DataRow dr=ds.Tables[0].NewRow();
System.Guid id=System.Guid.NewGuid();
dr["Guid"]=id.ToString();
dr["Context"]=TextBox2.Text;
dr["LB"]="1,2,3,4,";
dr["senT_Date"]=DateTime.Now.ToShortDateString();
dr["Autor"]=Session["Depart"].ToString();
dr["public"]=1;
ds.Tables[0].Rows.Add(dr);
ds.WriteXml(Page.MapPath("Common\\AllNew.xml"),System.Data.XmlWriteMode.WriteSchema);
这段程序是向XML添加一条记录。但考虑到这种方式对系统资源占用较大,因为我要填加一条记录就要将一个XML整体加载进来,此XML如下:
<?xml version="1.0" standalone="yes"?>
<XSD_AllNew xmlns="http://tempuri.org/XSD_AllNew.xsd">
<xs:schema id="XSD_AllNew" targetNamespace="http://tempuri.org/XSD_AllNew.xsd" xmlns:mstns="http://tempuri.org/XSD_AllNew.xsd" xmlns="http://tempuri.org/XSD_AllNew.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="New">
<xs:complexType>
<xs:sequence>
<xs:element name="GuID" type="xs:string" />
<xs:element name="Subject" type="xs:string" />
<xs:element name="Context" type="xs:string" />
<xs:element name="Public" type="xs:boolean" />
<xs:element name="LB" type="xs:string" />
<xs:element name="Autor" type="xs:string" />
<xs:element name="Sent_Date" type="xs:string" />
<xs:element name="IP" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="XSD_AllNew" msdata:IsDataSet="true" msdata:Locale="zh-CN">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="New" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<New>
<GuID>a10a000d-8dc3-499c-90ab-dfef03682527</GuID>
<Subject>888888888888</Subject>
<Context>888888888888</Context>
<Public>true</Public>
<LB>1,2,3,4,</LB>
<Autor>资源部</Autor>
<Sent_Date>2005-10-20</Sent_Date>
<IP>127.0.0.1</IP>
</New>
</XSD_AllNew>
2、XmlDocument方式
System.Xml.XmlDocument doc=new XmlDocument();
doc.Load(Page.MapPath("Common\\New.xml"));
XmlElement AddNew=doc.CreateElement("New");
AddNew.SetAttribute("GuID",id.ToString());
XmlElement AddSubject=doc.CreateElement("Subject");
AddSubject.InnerText=Title.Text;
AddNew.AppendChild(AddSubject);
XmlElement AddContext=doc.CreateElement("Context");
AddContext.InnerText=Title.Text;
AddNew.AppendChild(AddContext);
XmlElement AddPublic=doc.CreateElement("Public");
AddPublic.InnerText="1";
AddNew.AppendChild(AddPublic);
XmlElement AddLB=doc.CreateElement("LB");
AddLB.InnerText="1,2,3,4,";
AddNew.AppendChild(AddLB);
XmlElement AddAutor=doc.CreateElement("Autor");
AddAutor.InnerText="资源部";
AddNew.AppendChild(AddAutor);
XmlElement Addsent_Date=doc.CreateElement("sent_Date");
Addsent_Date.InnerText="2005-10-20";
AddNew.AppendChild(Addsent_Date);
XmlElement Addip=doc.CreateElement("ip");
Addip.InnerText=Page.Request.UserHostAddress.ToString();
AddNew.AppendChild(Addip);
doc.DocumentElement.AppendChild(AddNew);
XmlTextWriter tr=new XmlTextWriter(MapPath("Common\\hiNew.xml"),null);
tr.Formatting=Formatting.Indented;
doc.WriteContentTo(tr);
tr.Close();
此XML为:
<?xml version="1.0" standalone="yes"?>
<XSD_AllNew xmlns="http://tempuri.org/XSD_AllNew.xsd">
<xs:schema id="XSD_AllNew" targetNamespace="http://tempuri.org/XSD_AllNew.xsd" xmlns:mstns="http://tempuri.org/XSD_AllNew.xsd" xmlns="http://tempuri.org/XSD_AllNew.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="New">
<xs:complexType>
<xs:sequence>
<xs:element name="GuID" type="xs:string" />
<xs:element name="Subject" type="xs:string" />
<xs:element name="Context" type="xs:string" />
<xs:element name="Public" type="xs:boolean" />
<xs:element name="LB" type="xs:string" />
<xs:element name="Autor" type="xs:string" />
<xs:element name="Sent_Date" type="xs:string" />
<xs:element name="IP" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="XSD_AllNew" msdata:IsDataSet="true" msdata:Locale="zh-CN">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="New" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<New xmlns="">
<GuID>a10a000d-8dc3-499c-90ab-dfef03682527</GuID>
<Subject>888888888888</Subject>
<Context>888888888888</Context>
<Public>true</Public>
<LB>1,2,3,4,</LB>
<Autor>资源部</Autor>
<Sent_Date>2005-10-20</Sent_Date>
<IP>127.0.0.1</IP>
</New>
</XSD_AllNew>
这种方式我觉得对资源占用较少。
所有我理想的XML使用方式是:信息的呈现用DataSet,信息的修改、添加、删除用XmlDocument方式
可是让我吐血的是:用XmlDocument方式添加进取的信息,DataSet不认,经过仔细对比发现用XmlDocument方式添加的信息会在New节多一个属性xmlns="",我真的服了,一点办法也没有,现在暂时只能牺牲效率和服务器内存,用DataSet方式做信息的查询和修改。
在论坛上的各位大虾~能解释清楚为什么这样 我就太感谢了。该死的xmlns=""