问题描述
xml生成的格式:<?xmlversion="1.0"encoding="utf-8"?><Message>//<head></head>标签里面的内容是固定的<Head><BizMsgID>3307</BizMsgID><ASID>AS100</ASID><AreaCode>3307</AreaCode></Head>//<Data></Data>标签里面的内容是从数据库读取到的(动态绑定的)<Data><ZTT="1"A="11"B="0"C="1"D="1"E="1"F="1"G="99"H="1"/></Data></Message>
解决方案
解决方案二:
参考,另外你的xml是错误的,ZIT不能直接跟等号stringxml=@"<Message><Head><BizMsgID>3307</BizMsgID><ASID>AS100</ASID><AreaCode>3307</AreaCode></Head><Data></Data></Message>";//<ZTT="1"A="11"B="0"C="1"D="1"E="1"F="1"G="99"H="1"/>vardata=new{A=11,B=0,C=1,D=1,E=1};XElementroot=XElement.Parse(xml);varele=newXElement("ZIT");foreach(varpindata.GetType().GetProperties()){ele.SetAttributeValue(p.Name,p.GetValue(data));}root.Element("Data").Add(ele);Console.WriteLine(root);
解决方案三:
嗯嗯、我打快打错了<ZTTA="11"B="0"C="1"D="1"E="1"F="1"G="99"H="1"/>;那按照你这个写法、最后保存的路径,应该怎么写
解决方案四:
引用1楼starfd的回复:
参考,另外你的xml是错误的,ZIT不能直接跟等号stringxml=@"<Message><Head><BizMsgID>3307</BizMsgID><ASID>AS100</ASID><AreaCode>3307</AreaCode></Head><Data></Data></Message>";//<ZTT="1"A="11"B="0"C="1"D="1"E="1"F="1"G="99"H="1"/>vardata=new{A=11,B=0,C=1,D=1,E=1};XElementroot=XElement.Parse(xml);varele=newXElement("ZIT");foreach(varpindata.GetType().GetProperties()){ele.SetAttributeValue(p.Name,p.GetValue(data));}root.Element("Data").Add(ele);Console.WriteLine(root);
那按照你这个写法、最后保存的路径,应该怎么写
解决方案五:
stringsavePath="c:....save.xml";root.Save(savePath);即可以保存xml内容
解决方案六:
引用1楼娃都会打酱油了的回复:
参考,另外你的xml是错误的,ZIT不能直接跟等号stringxml=@"<Message><Head><BizMsgID>3307</BizMsgID><ASID>AS100</ASID><AreaCode>3307</AreaCode></Head><Data></Data></Message>";//<ZTT="1"A="11"B="0"C="1"D="1"E="1"F="1"G="99"H="1"/>vardata=new{A=11,B=0,C=1,D=1,E=1};XElementroot=XElement.Parse(xml);varele=newXElement("ZIT");foreach(varpindata.GetType().GetProperties()){ele.SetAttributeValue(p.Name,p.GetValue(data));}root.Element("Data").Add(ele);Console.WriteLine(root);
大神,这个我要绑定的数据是从数据库动态生成的。你这个写死了啊
解决方案七:
你用个string读取db信息,然后把string变量替换进去就可以了呗!
解决方案八:
引用4楼kensouterry1的回复:
stringsavePath="c:....save.xml";root.Save(savePath);即可以保存xml内容
谢谢,这个我都写出来了。和1楼那个方法差不多、不过都是写死了。我是想<data></data>里面的数据是可以动态绑定的。是动态的但不是写死的!
解决方案九:
引用6楼kensouterry1的回复:
你用个string读取db信息,然后把string变量替换进去就可以了呗!
不会啊,能够写下嘛。谢谢了大神
解决方案十:
你要怎么动态?ZIT是动态生成,最后通过root.Element("Data").Add进去的,ZIT的属性也都是通过反射得到的,你还有什么地方要动态的?
解决方案十一:
staticvoidMain(string[]args){stringxml=@"<Message><Head><BizMsgID>3307</BizMsgID><ASID>AS100</ASID><AreaCode>3307</AreaCode></Head><Data></Data></Message>";//<ZTT="1"A="11"B="0"C="1"D="1"E="1"F="1"G="99"H="1"/>//自己从数据库中构造dictionary对象,键值对beginDictionary<string,string>ht=newDictionary<string,string>();ht.Add("ZIT","1");ht.Add("A","1");ht.Add("B","1");ht.Add("C","1");ht.Add("Col","....");//endXElementroot=XElement.Parse(xml);//查询DATA元素节点XElementdataElem=root.Descendants("Data").FirstOrDefault();if(dataElem!=null){intcount=0;stringfirstKey="";foreach(KeyValuePair<string,string>iteminht){count++;stringkey=item.Key.ToString();stringval=item.Value.ToString();if(count==1){firstKey=key;dataElem.Add(newXElement(key));}else{XElementelem=dataElem.Descendants(firstKey).FirstOrDefault();elem.Add(newXAttribute(key,val));}}}//root.Save("某个磁盘文件");Console.WriteLine(root);/*<Message><Head><BizMsgID>3307</BizMsgID><ASID>AS100</ASID><AreaCode>3307</AreaCode></Head><Data><ZITA="1"B="1"C="1"Col="...."/></Data></Message>*/Console.ReadLine();}
自己去构造Dictionary对象,不解释
解决方案十二:
如果是SQLSERVER的话,可以直接产生XML了,可以在百度里谷歌一下SQLFORXML其他数据库不清楚
解决方案十三:
我个人觉得:楼主可以用XElement好像是System.xml.linq控件吧。忘记了。思路就是数据库数据-----XElement对象----调用他的Save()方法。最简单了。