您的位置:首页 > 其它

linq查询xml

2016-04-11 10:56 218 查看

1.加载xml字符串

XElement root = XElement.Parse(@"<?xml version='1.0' encoding='utf-8'?>
<Items>
<Item>
<Id>1</Id>
<Name>Name1</Name>
<Description>Test1</Description>
<Children>
<Item>
<Id>1.1</Id>
<Name>Name1.1</Name>
<Description>Test1.1</Description>
</Item>
</Children>
</Item>
<Item>
<Id>2</Id>
<Name>Name2</Name>
<Description>Test2</Description>
</Item>
</Items>

");

var elements = root.Elements("Item");//root下的第一层Item(Id为1和2)



XElement firstItem = root.Element("Item").Element("Name"); //第一个Item下的Name(Id为1)


var descendants = root.Element("Item").Descendants("Name");//第一个Item下的所有Name(包括Children下的,Id为1和1.1)


var xElements=root.Descendants("Name");//root下的所有子代的Name(Id为1,1.1,2)

 

2.直接加载文件:

var users = XElement.Load("TemplateUser.config").Elements("user"); 

var user = users.FirstOrDefault(); 

var Account = user.Element("Account").Value.ToString();  

 

 

3.XmlDocument转换为XDocument

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlStr);   //xml字符串转成xml文档对象
                  

XDocument xdoc =doc.ToXDocument(); //xmldocument转成xdoccument 扩展方法
var eventId = xdoc.Document.Root.Element("EventID"); //根节点下的eventid节点
if (eventId != null)
    {

          MessageBox.Show(eventId.Value); //15

    }

 

 

 

扩展方法

public static class XmlDocumentExtensions
    {
        public static XDocument ToXDocument(this XmlDocument document)
        {
            return document.ToXDocument(LoadOptions.None);
        }

        public static XDocument ToXDocument(this XmlDocument document, LoadOptions options)
        {
            using (XmlNodeReader reader = new XmlNodeReader(document))
            {
                return XDocument.Load(reader, options);
            }
        }
    }

 

 

4.xpath

string xml = "<Users><User><Account>admin</Account><Pwd>123</Pwd></User><User><Account>admin1</Account><Pwd>1232</Pwd></User></Users>";
var doc = XDocument.Parse(xml);
var elements = doc.XPathSelectElements("//Account"); //admin admin1

var tmp = doc.XPathSelectElements("//User/Account"); //admin admin1

/*
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
*/

From:http://www.cnblogs.com/xuejianxiyang/p/5377486.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: