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字符串或保存成文件如下:
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方法
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 }
浙公网安备 33010602011771号