zoukankan      html  css  js  c++  java
  • XML系列之--对电文格式XML的简单操作(三)

         前两章介绍了关于Linq创建、解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如下,当遇到这样

    <?xml version="1.0" encoding="utf-8"?>
    <x0:Envelop xmlns:x0="http://www.w3school.com.cn/Envelope">
      <x1:Header xmlns:x1="http://www.w3school.com.cn/Header">
        <x1:Header>
          <x1:Type>ICC</x1:Type>
          <x1:Version>01</x1:Version>
        </x1:Header>
      </x1:Header>
      <x1:Body xmlns:x1="http://www.w3school.com.cn/Body">
        <x2:IBBC xmlns:x2="http://www.w3school.com.cn/IBBC/01">
          <x2:SecondInform>123</x2:SecondInform>
          <x2:Status>
            <StatusCode>2222</StatusCode>
          </x2:Status>
          <x2:Test>
            <x2:Att price="100">12100</x2:Att>
            <x2:Att price="200">12200</x2:Att>
          </x2:Test>     
        </x2:IBBC>
      </x1:Body>
    </x0:Envelop>

    对于删除操作:

    第一,根据Linq查询语法获取StatusCode节点对象

    第二,调用Remove方法删除对象节点

    第三,保存文档

    XElement root = XElement.Load("d:\test.xml");
    XNamespace x2 = @"http://www.w3school.com.cn/IBBC/01";//刪除
    var statuscode = from c in root.Descendants(x2 + "StatusCode") select c;
    statuscode.Remove();
    root.Save(@"d:	est.xml");

    对于修改操作:

    这里有个地方要注意下

       第一: SetValue方法,获取对象,添加修改值

    //修改
    var setcode = from d in root.Descendants(x2 + "StatusCode") select d; setcode.SingleOrDefault().SetValue("1111"); root.Save(@"d: est.xml");

       第二:SetElementValue方法,可以理解为覆盖,如果当前文档存在StatusCode元素,则进行修改,如果不存在,其功能相当于Add,将其元素添加到文档中

    //修改
    var setcode = from d in root.Descendants(x2 + "Status")
             select d;                  
    setcode.SingleOrDefault().SetElementValue("StatusCode","2222"); root.Save(@"d: est.xml");

    对于添加操作:

       其实关于添加操作,在创建XML的时候就涉及到,现在做一些补充说明

       ①.在指定节点(Status)下插入指定节点(Test)(ps:StatusCode同级元素)

    //添加
    var tarStatus = from x in root.Descendants("StatusCode")
              select x;
    XElement test = new XElement(x2+"Test","我是一個測試值");
    tarStatus.FirstOrDefault().AddAfterSelf(test);
    root.Save(@"d:	est.xml");

      可能有些复杂,或者说有些繁琐

    对于查询操作:

      1. Element():LINQ to XML 查询方法XDocument类的成员,也可用于XEelment类。该方法返回的XML文档或片段中的第一级元素

    //查詢
     var quests = from c in root.Elements()
               select c;
     foreach (var item in quests)
     {
        Console.WriteLine(item);
      }
     root.Save(@"d:	est.xml");

    如图,当选择 select c 的返回Header和Body两个节点所有元素;当选择 Select c.Name时,返回节点名Header和Body

      2.Descendants(): LINQ to XML 查询方法XDocument类的成员,也可用于XEelment类。该方法返回的XML文档或片段中的子元素 

    //查詢
     var quests = from c in root.Descendants(x1 + "Type")
              select c.Value ;
     foreach (var item in quests)
     {
          Console.WriteLine(item);
     }
     root.Save(@"d:	est.xml");

      3.Attribute():LINQ to XML 查询方法Attribute()成员,返回当前元素的所有特性

    //查詢  得到12200
     var quests = from c in root.Descendants(x2 + "Att")
              where c.Attribute("price").Value=="200"
              select c.Value;
      foreach (var item in quests)
       {
          Console.WriteLine(item);
        }
      root.Save(@"d:	est.xml");

    XML系列之--创建电文格式的XML(一)

    XML系列之--解析电文格式的XML(二)

    XML系列之--对电文格式XML的简单操作(三)

    XML系列之--Linq操作带属性的XML(四)

  • 相关阅读:
    Linux内核学习笔记七——内核同步机制和实现方式
    Linux内核学习笔记五——中断推后处理机制
    Linux内核学习笔记十——虚拟文件系统概念
    Android中LocalSocket使用
    Linux下常见命令
    Linux内核学习笔记八——定时器和时间管理
    Linux内核学习笔记九——内核内存管理方式
    [Android]Android的常用adb命令
    Linux内核学习笔记六——并发和同步概念
    Linux内核学习笔记十一——I/O层和I/O调度机制
  • 原文地址:https://www.cnblogs.com/Sientuo/p/6134903.html
Copyright © 2011-2022 走看看