高分求解:关于XML的一个小问题。

tiktak1 2004-10-21 12:32:12
如何将XML中某个节点的值读取出来,将其数值+1再保存到该节点呢?请提供实例代码。一旦解决立即给分!
...全文
117 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
BearRui 2004-10-21
  • 打赏
  • 举报
回复
("//click")中的//click是XPath语句,是查找所有节点名为click的节点集!!!

tiktak1 2004-10-21
  • 打赏
  • 举报
回复
cancersyf(fengzhimei) ,有个问题,("//click").前面干吗有2斜杠?
tiktak1 2004-10-21
  • 打赏
  • 举报
回复
cancersyf(fengzhimei) 汗。。你上次没贴Document.SelectSingleNode("//click").InnerText = iValue + 1; 这句……
先谢谢2位,我研究研究!
cancersyf 2004-10-21
  • 打赏
  • 举报
回复
这个不行吗?

System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
xmlDocument.LoadXml("c:\stat.xml");
int iValue = Convert.ToInt32(xmlDocument.SelectSingleNode("//click").InnerText);
xmlDocument.SelectSingleNode("//click").InnerText = iValue + 1;
xmlDocument.Save("c:\stat.xml");
BearRui 2004-10-21
  • 打赏
  • 举报
回复
XmlDocument doc=new XmlDocument();
doc.Load(@"e:\test.xml");

int i=int.Parse(doc.DocumentElement.ChildNodes[0].InnerText)+1;
doc.DocumentElement.ChildNodes[0].InnerText=i.ToString();

doc.Save(@"e:\test.xml");

------------------------
测试XML:
<?xml version="1.0" encoding="gb2312"?>
<Article>
<BookName>11111</BookName>
</Article>

结果XML:
<?xml version="1.0" encoding="gb2312"?>
<Article>
<BookName>11112</BookName>
</Article>
tiktak1 2004-10-21
  • 打赏
  • 举报
回复
先结贴吧,大哥到这里接着指点我好吗?
http://community.csdn.net/Expert/topic/3475/3475913.xml?temp=.9036676
BearRui 2004-10-21
  • 打赏
  • 举报
回复
System.Xml.XmlNodeList nodeList = doc.SelectNodes("/list/theme/ID");
int id = (Int32.Parse(nodeList[nodeList.Count - 1].InnerText) );

这里得到的ID应该是105
tiktak1 2004-10-21
  • 打赏
  • 举报
回复
我现在代码是这样:
XmlDocument doc = new XmlDocument();
string t1 = "../admin/data/BasketballHistory.xml";
doc.Load(Server.MapPath(t1));//打开文件
System.Xml.XmlNodeList nodeList = doc.GetElementsByTagName("ID");
int id = (Int32.Parse(nodeList[nodeList.Count - 1].InnerText) );
System.Text.StringBuilder maxID = new System.Text.StringBuilder(id.ToString());
string sFile = "e:/SlamDunkChinesePortal/sdsite/admin/data" + "/" + maxID + "/"+maxID+".xml";
doc.Load(sFile);
int i = int.Parse(doc.DocumentElement.ChildNodes[0].InnerText) + 1;
doc.DocumentElement.ChildNodes[0].InnerText = i.ToString();
doc.Save(sFile);
可是为什么不管我刷新哪个,都只有最后那个XML文件的click值+1呢?
int id = (Int32.Parse(nodeList[nodeList.Count - 1].InnerText) );这句代码是取最后一个的ID的值吗?
这个是/admin/data/BasketballHistory.xml的内容:
<?xml version="1.0" encoding="utf-8"?>
<list>
<theme>
<title>篮球运动传入中国</title>
<ID>101</ID>
<sort>0</sort>
<date>2004-10-14</date>
</theme>
<theme>
<title>使球从篮筐里落下来竟花了22个春秋</title>
<ID>102</ID>
<sort>0</sort>
<date>2004-10-14</date>
</theme>
<theme>
<title>篮球历史</title>
<ID>103</ID>
<sort>0</sort>
<date>2004-10-14</date>
</theme>
<theme>
<title>你好</title>
<ID>104</ID>
<sort>0</sort>
<date>2004-10-20</date>
</theme>
<theme>
<title>你好</title>
<ID>105</ID>
<sort>0</sort>
<date>2004-10-20</date>
</theme>
</list>
cancersyf 2004-10-21
  • 打赏
  • 举报
回复
谢谢BearRui提醒,那就这样就可以了:

System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
xmlDocument.Load(@"c:\stat.xml");
int iValue = Convert.ToInt32(xmlDocument.SelectSingleNode("talk/click").InnerText);
xmlDocument.SelectSingleNode("talk/click").InnerText = iValue + 1;
xmlDocument.Save(@"c:\stat.xml");
BearRui 2004-10-21
  • 打赏
  • 举报
回复
可以这样啊:

string sFile=e:\folder.ToString() + "/" + maxID + ".xml";

doc.Load(sFile);
tiktak1 2004-10-21
  • 打赏
  • 举报
回复
BearRui(孤熊 | 阿弥陀佛!空!) 大概是我没说清楚吧,就是说我的xml文件有很多,但是你给的代码只能写在我的一个aspx文件里,因为这些xml都是在这个页面生成的,比如103.xml;104.xml等等。
doc.Load(@"e:\folder.ToString() + "/" + maxID + ".xml"");我可以这样写吗?
BearRui 2004-10-21
  • 打赏
  • 举报
回复
try:

XmlDocument doc=new XmlDocument();
doc.Load(@"e:\test.xml");

int i=int.Parse(doc.DocumentElement.LastChild.InnerText)+1; //最后一个节点的值+1
doc.DocumentElement.LastChild.InnerText=i.ToString();

doc.Save(@"e:\test.xml");
tiktak1 2004-10-21
  • 打赏
  • 举报
回复
其实就是一个论坛发贴而已。我是想统计某个帖子的click节点,统计该页面的访问次数。
刚才你给的代码,我指定某XML文件的话已经成了!谢谢先,但是因为我在后台每次发布都产生一个XML文件,根据我的ID节点,每次+1来生成。代码就是上面那段。我再贴我的XML文件:
<?xml version="1.0"?>
<talk>
<content>5</content>
<title>2222222222222222</title>
<case>222222222222222</case>
<source>222</source>
<address />
<date />
<click>0</click>
</talk>
BearRui 2004-10-21
  • 打赏
  • 举报
回复
还是没明白你的意思,你贴出你本来的XML文件,说一下想要那个节点值+1;
tiktak1 2004-10-21
  • 打赏
  • 举报
回复
System.Xml.XmlElement ID = doc.CreateElement("ID");
ID.InnerText = maxID.ToString();
我觉得已经很接近答案了……再拉兄弟一把呀!
tiktak1 2004-10-21
  • 打赏
  • 举报
回复
2位大哥,真不好意思,还有个小问题……就是我的XML文件是生成的,不是确定的……请看一下我的代码:
System.IO.FileStream fs = new System.IO.FileStream(Server.MapPath(folder.ToString() + "/" + maxID + ".xml"), System.IO.FileMode.Create);
System.Xml.XmlTextWriter tw = new System.Xml.XmlTextWriter(fs, null);
tw.Formatting = System.Xml.Formatting.Indented;
tw.WriteStartDocument();
tw.WriteStartElement("talk");
//tw.WriteStartElement("reply");
["name"].ToString());
tw.WriteElementString("content", txtContent.Text);
tw.WriteElementString("title", txtTitle.Text);
tw.WriteElementString("case", txtCase.Text);
tw.WriteElementString("source", txtSource.Text);
tw.WriteElementString("address", txtAddress.Text);
tw.WriteElementString("date", txtDate.Text);
tw.WriteElementString("click", "0");
这样的话,我怎么样在doc.Load(@"e:\test.xml");里写出我确切要的那个xml呢?谢谢谢谢
BearRui 2004-10-21
  • 打赏
  • 举报
回复
cancersyf(fengzhimei)兄下面这句好象有问题吧。

xmlDocument.LoadXml("c:\stat.xml");

LoadXml方法是加载XML字符串的,而不是加载文件的,加载文件用load吧!!!

62,249

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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