linq to xml 读xml类型的字符串

 

 用linq从xml字符串中查询数据,可以转换成dataset,也可以按某个节点进行查询

 

                                                                                                                  
                 
  
 1 void Main()

 2 {   
 3 string str = "<Info><state>待命</state><WId>000028532</WId><BillState>装货中</BillState><Driver>陈靖彩</Driver><items><item><Consignor>利源煤灰</Consignor><Consignee>阿海电站</Consignee>" +
 4 "<LoadLocation>利源煤灰</LoadLocation><UnloadLocation>水电七局</UnloadLocation><GoodName>煤灰</GoodName><GoodsBreed>II 级灰</GoodsBreed><GoodPack>散装</GoodPack><Send>0.0000</Send>" +
 5 "<Recive>0.0000</Recive></item></items><items><item><Consignor>利源煤灰1</Consignor><Consignee>阿海电站1</Consignee><LoadLocation>利源煤灰1</LoadLocation><UnloadLocation>水电七局1</UnloadLocation>" +
 6 "<GoodName>煤灰1</GoodName><GoodsBreed>II 级灰1</GoodsBreed><GoodPack>散装1</GoodPack><Send>0.0000</Send><Recive>0.0000</Recive></item></items><items><item><Consignor>利源煤灰2</Consignor>" +
 7 "<Consignee>阿海电站2</Consignee><LoadLocation>利源煤灰2</LoadLocation><UnloadLocation>水电七局2</UnloadLocation><GoodName>煤灰2</GoodName><GoodsBreed>II 级灰2</GoodsBreed><GoodPack>散装2</GoodPack>" +
 8 "<Send>0.0000</Send><Recive>0.0000</Recive></item></items></Info>";
 9 var data=XElement.Parse(str);
10

11 var query=from x in data.Descendants("items")   
12 selectnew

13             {
14                 state=x.Parent.Element("state").Value,
15                 WId =x.Parent.Element("WId").Value,
16                 BillState =x.Parent.Element("BillState").Value,
17                 Driver=x.Parent.Element("Driver").Value,
18                 Consignor=x.Element("item").Element("Consignor").Value,
19                 Consignee =x.Element("item").Element("Consignee").Value,
20                 LoadLocation =x.Element("item").Element("LoadLocation").Value,
21                 UnloadLocation =x.Element("item").Element("UnloadLocation").Value,
22                 GoodName   =x.Element("item").Element("GoodName").Value
23             };
24  query.ToList().ForEach(q=>Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}\t",q.state,q.WId,q.BillState,q.Driver,q.Consignor,q.Consignee,q.LoadLocation,q.UnloadLocation,q.GoodName));
25/*

26 待命    000028532   装货中 陈靖彩 利源煤灰    阿海电站    利源煤灰    水电七局    煤灰  
27 待命  000028532   装货中 陈靖彩 利源煤灰1   阿海电站1   利源煤灰1   水电七局1   煤灰1 
28 待命  000028532   装货中 陈靖彩 利源煤灰2   阿海电站2   利源煤灰2   水电七局2   煤灰2

 */


下面可以查询数据的方法

 xml字符串或保存成文件如下:

 1 <?xml version="1.0"?>
 2 <DAMML><Items>
 3 <Item>
 4 <Header>
 5 <Metadata>
 6 <Property name="layout_id" value="1"/>
 7 <Property name="paper_id" value="1"/>
 8 <Property name="section_id" value="0"/>
 9 <Property name="layout_name" value="一版"/>
10 <Property name="layout_code" value="ban01"/>
11 <Property name="order_id" value="1"/>
12 <Property name="isdefault" value="1"/>
13 </Metadata></Header>
14 </Item>
15 <Item><Header><Metadata>
16 <Property name="layout_id" value="4"/>
17 <Property name="paper_id" value="1"/>
18 <Property name="section_id" value="0"/>
19 <Property name="layout_name" value="四版"/>
20 <Property name="layout_code" value="ban04"/>
21 <Property name="order_id" value="4"/>
22 <Property name="isdefault" value="0"/>
23 </Metadata>
24 </Header></Item>
25 </Items>
26 <Return><Property name="return_value" value="true"/><Property name="return_info"><![CDATA[函数GetLayoutsByColumnID6,执行成功!]]></Property></Return></DAMML>

27 <!--版次信息!-->  

C#中查询xml方法

 1 XDocument xdoc = XDocument.Parse(strOutInfo);
 2                 var query = from pro in xdoc.Descendants("Property")
 3                             where pro.Attribute("name").Value == "layout_id" || pro.Attribute(" name").Value == "layout_name"
 4                             select pro;
 5                 List<XElement> layList = query.ToList();
 6                 for (int i = 0; i < layList.Count;i=i+2 )
 7                 {
 8                     string LayoutId = "";
 9                     string LayoutName = "";
10                     LayoutId = layList[i].Attribute("value").Value;
11                     LayoutName = layList[i+1].Attribute("value").Value;
12                     if (!dicLayout.ContainsKey(LayoutId))
13                     {
14                         dicLayout.Add(LayoutId, LayoutName);
15                     }

16                 }  


 

 

 

 

posted on 2012-11-12 17:18  快乐牛牛之家  阅读(356)  评论(0)    收藏  举报

导航