c# xml 中多个节点中的内容相同 怎么提取出来
<trade><num>11</num><sid>92167761887511</sid></trade><trade><num>1</num><sid>92167761...
<trade>
<num>11</num>
<sid>92167761887511</sid>
</trade>
<trade>
<num>1</num>
<sid>92167761877511</sid>
</trade>
<trade>
<sid>92074864413469</sid>
</trade>
这样一段xml 其中 有两条数据的sid是相同的 找到具有相同sid的节点的 num 节点 并求和
刚接触 xml 一点都不懂啊 求大神解答 要详细点 最好 有代码 非常感谢了 展开
<num>11</num>
<sid>92167761887511</sid>
</trade>
<trade>
<num>1</num>
<sid>92167761877511</sid>
</trade>
<trade>
<sid>92074864413469</sid>
</trade>
这样一段xml 其中 有两条数据的sid是相同的 找到具有相同sid的节点的 num 节点 并求和
刚接触 xml 一点都不懂啊 求大神解答 要详细点 最好 有代码 非常感谢了 展开
6个回答
展开全部
public void GetxmlSum()
{
StringBuilder str_xml = new StringBuilder();
str_xml.Append("<xmls>");
str_xml.Append("<trade><num>10</num><sid>92167761877511</sid></trade>");
str_xml.Append("<trade><num>20</num><sid>92167761877511</sid></trade>");
str_xml.Append("<trade><num>30</num><sid>92074864413469</sid></trade>");
str_xml.Append("<trade><num>50</num><sid>92074864413469</sid></trade>");
str_xml.Append("</xmls>");
Dictionary<string, Int32> dic = new Dictionary<string, Int32>();
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(str_xml.ToString());
System.Xml.XmlNode xmlNode = doc.SelectSingleNode("/xmls");
foreach (System.Xml.XmlNode tradeNode in xmlNode.SelectNodes("trade"))
{
System.Xml.XmlNode sidNode = tradeNode.SelectSingleNode("sid");
string str_sid = sidNode.InnerText;
System.Xml.XmlNode numNode = tradeNode.SelectSingleNode("num");
int str_numa = Convert.ToInt32(numNode.InnerText);
//获取所有key
Dictionary<string, Int32>.KeyCollection keys = dic.Keys;
//if (keys.Count == 0)
// dic.Add(str_sid, str_numa);
if (!dic.ContainsKey(str_sid.ToString()))
{
dic.Add(str_sid, str_numa);
}
else
{
//取出该key 的 value
int valusenum = Convert.ToInt32(dic[str_sid]);
//相加得到最新value
valusenum += str_numa;//最新value
//移除原来的值
dic.Remove(str_sid);
//从新添加最新key和value
dic.Add(str_sid, valusenum);
}
}
foreach (KeyValuePair<string, Int32> kvp in dic)
{
MessageBox.Show("sid为 " + kvp.Key + " 的和 = " + kvp.Value.ToString());
}
}
{
StringBuilder str_xml = new StringBuilder();
str_xml.Append("<xmls>");
str_xml.Append("<trade><num>10</num><sid>92167761877511</sid></trade>");
str_xml.Append("<trade><num>20</num><sid>92167761877511</sid></trade>");
str_xml.Append("<trade><num>30</num><sid>92074864413469</sid></trade>");
str_xml.Append("<trade><num>50</num><sid>92074864413469</sid></trade>");
str_xml.Append("</xmls>");
Dictionary<string, Int32> dic = new Dictionary<string, Int32>();
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(str_xml.ToString());
System.Xml.XmlNode xmlNode = doc.SelectSingleNode("/xmls");
foreach (System.Xml.XmlNode tradeNode in xmlNode.SelectNodes("trade"))
{
System.Xml.XmlNode sidNode = tradeNode.SelectSingleNode("sid");
string str_sid = sidNode.InnerText;
System.Xml.XmlNode numNode = tradeNode.SelectSingleNode("num");
int str_numa = Convert.ToInt32(numNode.InnerText);
//获取所有key
Dictionary<string, Int32>.KeyCollection keys = dic.Keys;
//if (keys.Count == 0)
// dic.Add(str_sid, str_numa);
if (!dic.ContainsKey(str_sid.ToString()))
{
dic.Add(str_sid, str_numa);
}
else
{
//取出该key 的 value
int valusenum = Convert.ToInt32(dic[str_sid]);
//相加得到最新value
valusenum += str_numa;//最新value
//移除原来的值
dic.Remove(str_sid);
//从新添加最新key和value
dic.Add(str_sid, valusenum);
}
}
foreach (KeyValuePair<string, Int32> kvp in dic)
{
MessageBox.Show("sid为 " + kvp.Key + " 的和 = " + kvp.Value.ToString());
}
}
展开全部
...刚才的好像也是你发的啊-__#
这个要引用 System.Xml.Linq; System.Xml.XPath;
var doc = XDocument.Load("xml file");
var eles = doc.XPathSelectElements("list/trade[sid=92167761877511]");
var sum = 0;
foreach (var item in eles)
{
sum += Convert.ToInt32(item.Element("num").Value);
Console.WriteLine(item.Element("num").Value);
}
Console.WriteLine(sum);
Console.Read();
这个要引用 System.Xml.Linq; System.Xml.XPath;
var doc = XDocument.Load("xml file");
var eles = doc.XPathSelectElements("list/trade[sid=92167761877511]");
var sum = 0;
foreach (var item in eles)
{
sum += Convert.ToInt32(item.Element("num").Value);
Console.WriteLine(item.Element("num").Value);
}
Console.WriteLine(sum);
Console.Read();
追问
。。。比较着急用就多发了几个 大哥果然高人 代码 写这么快 ,我用的时候它说
错误1无法将“void”赋予隐式类型的局部变量是怎么个情况呢 本人 刚学不久 见笑了 谢谢了
追答
你代码贴 出来看看
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
DataSet ds = new DataSet("trade的父节点");
ds.ReadXml(FilePath);
Datatable dtXML= ds.Tables["trade"];
变成了datatable就随你去弄了
Xml.Linq也挺方便的,你可以去找找方法
ds.ReadXml(FilePath);
Datatable dtXML= ds.Tables["trade"];
变成了datatable就随你去弄了
Xml.Linq也挺方便的,你可以去找找方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用xml.SelectNodes()方法会得到相同名称节点的一个NodeList,通过这个list来访问把
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
xmlnode.selectNodes(string xpath)
追问
大哥 还能具体点吗 对于 xml 方法 一点也不熟悉 谢谢了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询