在.net的XML中dataset和XmlDocument好像不能很好的兼容

wyc_net2004 2005-10-22 12:00:29
在.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=""
...全文
602 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
otoexpert 2005-11-01
  • 打赏
  • 举报
回复
该死的xmlns=""???
只要在创建节点时指定和父节点同样的xmlns就不会有这玩意了,比如:
XmlElement AddPublic=doc.CreateElement("Public", "http://tempuri.org/XSD_AllNew.xsd");
whslovexyp 2005-11-01
  • 打赏
  • 举报
回复
xmlDoc.Save(Server.MapPath(".\\db\\dbGuest.xml"));
如果保存还不行就只能帮你顶了.
yulong_shen 2005-11-01
  • 打赏
  • 举报
回复

System.Xml.XmlDataDocument 可以去查一下msdn
otoexpert 2005-11-01
  • 打赏
  • 举报
回复
或者改xmlns声明
<XSD_AllNew xmlns="">
<xs:schema id="XSD_AllNew" targetNamespace="" 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">

关于细节,由于我对.net不熟,只知道“DataSet不认”是因为在默认命名空间(即"http://tempuri.org/XSD_AllNew.xsd")下找不到New(New节点指定在命名空间""下)。
wyc_net2004 2005-10-24
  • 打赏
  • 举报
回复
SOS
wyc_net2004 2005-10-22
  • 打赏
  • 举报
回复
就是得我检查DataSet中ds.Tables[0].Rows.Count 显示是2,但其中实际上有6条纪录.前两条记录没有xmlns=""属性 是我用DataSet方式添加的,它就认,后面4条我用XmlDocument方式添加的 DataSet它就不认..SOS
wyc_net2004 2005-10-22
  • 打赏
  • 举报
回复
还是不行啊得到的结果
<New GuID="05a30db3-225f-4364-b8c2-f105d1f43bff" xmlns="">
<Subject>uuuuuuuuuuuu</Subject>
<Context>uuuuuuuuuuuu</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>
有xmlns=""这个属性 用DateSet读取此XML时刚加的这一项就不被DataSet认。
qpl007 2005-10-22
  • 打赏
  • 举报
回复
doc.DocumentElement.AppendChild(AddNew);
完成后用
doc.Save(MapPath("Common\\hiNew.xml"));
来保存

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧