当前位置:编程学习 > ASP.NET> 正文

linq xml 查询

时间:2015-3-29类别:编程学习

linq xml 查询

linq xml 查询

一、LINQ XML属性列表

 

属性 说明
Document 获取此 XObject 的 XDocument
 EmptySequence  获取空的元素集合
 FirstAttribute  获取此元素的第一个属性
 FirstNode  获取此节点的第一个子节点
 HasAttributes  获取一个值,该值指示此元素是否至少具有一个属性
 HasElements  获取一个值,该值指示此元素是否至少具有一个子元素
 IsEmpty  获取一个值,该值指示此元素是否不包含内容
 LastAttribute  获取此元素的最后一个属性
 LastNode  获取此节点的最后一个子节点
 Name  获取或设置此元素的名称
 NextNode  获取此节点的下一个同级节点
 NodeType  获取此节点的节点类型
 Parent  获取此 XObject 的父级 XElement
 PreviousNode  获取此节点的上一个同级节点
 Value  获取或设置此元素的串连文本内容

 

二、LINQ XML方法列表

 

方法 说明
Add 将指定的内容添加为此 XContainer 的子级
AddAfterSelf 紧跟在此节点之后添加指定的内容
AddAnnotation 将对象添加到此 XObject 的批注列表
AddBeforeSelf  紧邻此节点之前添加指定的内容
AddFirst 将指定的内容作为此文档或元素的第一个子级添加
Ancestors 返回此节点的上级元素的集合
AncestorsAndSelf 返回元素集合,其中包含此元素及其上级
Annotation 从此 XObject 获取指定类型的第一个批注对象
Annotations 获取此 XObject 的指定类型的批注集合
Attribute 返回具有指定 XName 的此 XElement 的 XAttribute
Attributes 返回此元素的属性集合
CreateReader 使用 readerOptions 参数指定的选项创建 XmlReader
CreateWriter 创建可用于将节点添加至 XContainer 的 XmlWriter
DescendantNodes 按文档顺序返回此文档或元素的子代节点集合
DescendantNodesAndSelf 返回节点的集合,而这些节点包含此元素以及此元素的所有子代节点,并将它们按文档顺序排列
Descendants 按文档顺序返回此文档或元素的子代元素集合
DescendantsAndSelf 返回元素的集合,而这些元素包含此元素以及此元素的所有子代元素,并按文档顺序排列它们
Elements 按文档顺序返回此元素或文档的经过筛选的子元素集合
ElementsAfterSelf  按文档顺序返回此节点后的同级元素集合
ElementsBeforeSelf  按文档顺序返回此节点前的同级元素集合
GetDefaultNamespace  获取此 XElement 的默认 XNamespace
GetNamespaceOfPrefix 获取此 XElement 的与特定前缀关联的命名空间
GetPrefixOfNamespace 获取与此 XElement 的命名空间关联的前缀
IsAfter  确定当前节点是否按文档顺序显示在指定节点之后
IsBefore 确定当前节点是否按文档顺序显示在指定节点之前
Load 从文件路径、TextReader、XmlReader、Stream中加载Xml数据
Nodes 按文档顺序返回此元素或文档的子节点集合
NodesAfterSelf 按文档顺序返回此节点后的同级节点的集合
NodesBeforeSelf 按文档顺序返回此节点前的同级节点的集合
Parse 从包含 XML 的字符串加载 XElement
Remove 从节点父级中删除此节点
RemoveAll 从此 XElement 中移除节点和属性
RemoveAnnotations 从此 XObject 移除指定类型的批注 
RemoveAttributes 移除此 XElement 的属性
RemoveNodes 从此文档或元素中移除子节点
ReplaceAll 使用指定的内容替换此元素的子节点和属性
ReplaceAttributes 使用指定的内容替换此元素的属性
ReplaceNodes 使用指定的内容替换此文档或元素的子节点
ReplaceWith 使用指定的内容替换此节点
Save 将此元素序列化为文件、XmlWriter、TextWriter、Stream
SetAttributeValue 设置属性的值、添加属性或移除属性
SetElementValue 设置子元素的值、添加子元素或移除子元素
SetValue 设置此元素的值
WriteTo 将此元素写入 XmlWriter

 

三、创建XML元素

使用XDocument的构造函数可以构造一个Xml文档对象;使用XElement对象可以构造一个xml节点元素,使用XAttribute构造函数可以构造元素的属性;使用XText构造函数可以构造节点内的文本。

 

  •  
  • C# 代码   复制
  • 
    class Program
        {
            static void Main(string[] args)
            {
                XElement xml =
                    new XElement("Persons",
                        new XElement("Person",
                            new XElement("Name", "刘备"),
                            new XElement("Age", "28")
                            ),
                        new XElement("Person",
                            new XElement("Name", "关羽"),
                            new XElement("Age", "27")
                            )
                        );
                xml.Save(@"D:\\123.xml");
    
                Console.ReadKey();
            }
        }
    
    		
  • 生成的XML文件

  •  
  • XML 代码   复制
  • 
    <?xml version="1.0" encoding="utf-8"?>
    <Persons>
      <Person>
        <Name>刘备</Name>
        <Age>28</Age>
      </Person>
      <Person>
        <Name>关羽</Name>
        <Age>27</Age>
      </Person>
    </Persons>
    
    		
  • 又如

  •  
  • C# 代码   复制
  • 
    class Program
        {
            static void Main(string[] args)
            {
                //创建处理指令
                XProcessingInstruction instruction = new XProcessingInstruction("xml-stylesheet","href=\\"hello.css\\" type = \\"text/css\\"");
                //创建声明对象
                XDeclaration xDeclaration = new XDeclaration("1.0","GB2312","yes");
                //创建文档类型
                XDocumentType documentType = new XDocumentType("Person", null, "Person.dtd", null);
                //创建XmlCData数据
                XCData data = new XCData("<h1>神奇的刘备</h1>");
                //创建XDocument文档
                XDocument xDoc = new XDocument();
                XElement xml =
                    new XElement("Persons",
                        new XElement("Person",
                            new XAttribute("Description", "此人龙凤之姿 天日之表;"),
                            new XElement("Name", data),
                            new XElement("Age", "28")
                            ),
                        new XElement("Person",
                            new XElement("Name", "关羽"),
                            new XElement("Age", "27")
                            )
                        );
                xDoc.Add(documentType);
                xDoc.Add(instruction);
                xDoc.Declaration = xDeclaration;
                xDoc.Add(xml);
                
                xDoc.Save(@"D:\\123.xml");
    
                Console.ReadKey();
            }
        }
    
    		
  • 输出XML

  •  
  • XML 代码   复制
  • 
    <?xml version="1.0" encoding="gb2312" standalone="yes"?>
    <!DOCTYPE Person SYSTEM "Person.dtd">
    <?xml-stylesheet href="hello.css" type = "text/css"?>
    <Persons>
      <Person Description="此人龙凤之姿 天日之表;">
        <Name><![CDATA[<h1>神奇的刘备</h1>]]></Name>
        <Age>28</Age>
      </Person>
      <Person>
        <Name>关羽</Name>
        <Age>27</Age>
      </Person>
    </Persons>
    
    		
  •  

    四、使用linq xml 读取xml

     

  • Linq是从集合中查询对象,在linq to xml中的集合是通过XElement的Elements(),Elements(string name),以及Descendants、DescendantsAndSelf、Ancestors、AncestorsAndSelf的几个重载方法中获得。
  •  
  • 获得XElement集合之后,可以通过XElement的Attribute(string name)方法获得元素的属性值,可以通过XElement的Value属性获得节点的文本值;使用linq就可以方便的做查询,做筛选排序了
  •  
  • 例如
  •  
  •  
  • C# 代码   复制
  • 
    static void Main(string[] args)
            {
                string xmlString = "<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?><Persons><Person Description=\\"牛人\\"><Name>刘备</Name><Age>28</Age></Person></Persons>";
                XElement xe = XElement.Parse(xmlString,LoadOptions.SetLineInfo);
                //读取属性值
                string ArriValue = xe.Elements("Person").First().Attribute("Description").Value;
                //又或者
                //string ArriValue = xe.Element("Person").Attribute("Description").Value;
                Console.WriteLine(ArriValue);   //输出 牛人
    
                //读取元素  读取Name的后面的第一个兄弟元素
                XElement xe1 = xe.Element("Person").Element("Name").ElementsAfterSelf().First();
                Console.WriteLine(xe1.Value);   //输出 28
                //读取父节点
                XElement xe2 = xe1.Parent;
                Console.WriteLine(xe2.Name);
    
                Console.ReadKey();
            }
    
    			
  •  
  • 又如:读取root的所有字节点,并打印出来
  •  
  •  
  • C# 代码   复制
  • 
    class Program
    {
        static void Main(string[] args)
        {
            var xDoc = new XDocument(new XElement( "root",
                new XElement("dog",
                    new XText("dog said black is a beautify color"),
                    new XAttribute("color", "black")),
                new XElement("cat"),
                new XElement("pig", "pig is great")));
    
            //xDoc输出xml的encoding是系统默认编码,对于简体中文操作系统是gb2312
            //默认是缩进格式化的xml,而无须格式化设置
    
            xDoc.Save(Console.Out);
            Console.WriteLine();
    
            var query = from item in xDoc.Element( "root").Elements()
                        select new
                        {
                            TypeName    = item.Name,
                            Saying      = item.Value,
                            Color       = item.Attribute("color") == null?(string)null:item.Attribute("color").Value
                        };
    
            foreach (var item in query)
            {
                Console.WriteLine("{0} 's color is {1},{0} said {2}",item.TypeName,item.Color??"Unknown",item.Saying??"nothing");
            }
            Console.Read();
        }
    }
    
    			
  •  

    五、linq xml修改数据

     

  •  
  • C# 代码   复制
  • 
    static void Main(string[] args)
            {
                string xmlString = "<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?><Persons><Person Description=\\"牛人\\"><Name>刘备</Name><Age>28</Age></Person></Persons>";
                XElement xe = XElement.Parse(xmlString, LoadOptions.SetLineInfo);
    
                //这是添加在最后,如果想添加在最前面可以使用AddFirst,
                //添加在本节点之前AddBeforSelf,添加在本节点之后AddAfterSelf
                xe.Add(new XElement("Person",
                            new XElement("Name", "关羽"),
                            new XElement("Age", 26)
                        )
                    );
                //删除所有子节点
                xe.RemoveAll();
    
    标签:
  • 上一篇下一篇

    猜您喜欢

    热门推荐