首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

linq to xml 的复杂查询解决方案

2012-04-23 
linq to xml 的复杂查询C# codeusing Systemusing System.Collections.Genericusing System.Linqusing

linq to xml 的复杂查询

C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xml.Linq;namespace ZTest_01.XmlTest{    class LinqXml    {        private const string xmldoc =@"<?xml version='1.0'?> <names xmlns='http://www.piedey.co.jp/example/linqtoxml201003'> <table name ='atable'>  <column id='M0001' Visible='false' name ='一郎'></column>   <column id='M0002' Visible='true' name ='次郎'></column>   <column id='F0001' Visible='false' name ='花子'></column>  <column id='F0001' Visible='true' name ='花子2'></column></table><table name='btable'>     <column id='M0001' Visible='false' name ='AAA'></column>   <column id='M0002' Visible='true' name ='BBB'></column>   <column id='F0001' Visible='false' name ='CCC'></column>  <column id='F0001' Visible='true' name ='DDD'></column></table></names>";        static void Main(string[] args)        {            var doc = XElement.Parse(xmldoc);            XNamespace ex = "http://www.piedey.co.jp/example/linqtoxml201003";            var query = from n in doc.Descendants(ex + "table")                        where n.Attribute("name").Value == "btable" && n.Element("column").Attribute("Visible").Value.Equals("true")                        select new                        {                            id = n.Element("column").Attribute("id").Value,                            name = n.Element("column").Attribute("name").Value,                        };            foreach (var elem in query)            {                Console.WriteLine(elem.id + " " + elem.name);            }            Console.Read();        }    }}


查询 table=btable and colmun行的Visible属性是true的 colmun行。
谢谢


[解决办法]
C# code
           XNamespace ex = "http://www.piedey.co.jp/example/linqtoxml201003";            var query = from x in XDocument.Parse(xmldoc).Descendants(ex + "column")                        where x.Attribute("Visible").Value == "true" && x.Parent.Attribute("name").Value == "btable"                        select new { id = x.Attribute("id").Value, name = x.Attribute("name").Value };            foreach (var q in query)                Console.WriteLine(q.id + " " + q.name);
[解决办法]
C# code
var stream = new MemoryStream(Encoding.UTF8.GetBytes(xmldoc));var doc = XDocument.Load(stream);var ret = doc.Descendants()    .Where(d => d.FirstAttribute.Value.Equals("btable"))    .Elements()    .Where(e => e.Attribute("Visible").Value.Equals("true"))    .Select(s => new { id = s.Attribute("id"), name = s.Attribute("name") });foreach (var node in ret){    Console.WriteLine("{0} | {1}", node.id, node.name);} 

热点排行