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></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></x2:SecondInform>
<x2:Status>
<StatusCode></StatusCode>
</x2:Status>
<x2:Test>
<x2:Att price=""></x2:Att>
<x2:Att price=""></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:\test.xml");
对于修改操作:
这里有个地方要注意下
第一: SetValue方法,获取对象,添加修改值
//修改
var setcode = from d in root.Descendants(x2 + "StatusCode")
select d;
setcode.SingleOrDefault().SetValue("");
root.Save(@"d:\test.xml");
第二:SetElementValue方法,可以理解为覆盖,如果当前文档存在StatusCode元素,则进行修改,如果不存在,其功能相当于Add,将其元素添加到文档中
//修改
var setcode = from d in root.Descendants(x2 + "Status")
select d;
setcode.SingleOrDefault().SetElementValue("StatusCode","");
root.Save(@"d:\test.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:\test.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:\test.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:\test.xml");
3.Attribute():LINQ to XML 查询方法Attribute()成员,返回当前元素的所有特性
//查詢 得到12200
var quests = from c in root.Descendants(x2 + "Att")
where c.Attribute("price").Value==""
select c.Value;
foreach (var item in quests)
{
Console.WriteLine(item);
}
root.Save(@"d:\test.xml");
XML系列之--创建电文格式的XML(一)
XML系列之--解析电文格式的XML(二)
XML系列之--对电文格式XML的简单操作(三)
XML系列之--Linq操作带属性的XML(四)
XML系列之--对电文格式XML的简单操作(三)的更多相关文章
- XML系列之--创建电文格式的XML(一)
关于XML,学校那会,老师在口中仅仅提及,自己也未曾深入接触过,仅是些将最基本XML文件内容显示在web定义的表格中之类的简单操作,如今项目中的收发电文涉及到复杂XML的操作.趁此契机好好回顾下XML ...
- XML系列之--解析电文格式的XML(二)
上一节介绍了XML的结构以及如何创建.讲到了XML可作为一种简单文本存储数据,把数据存储起来,以XML的方式进行传递.当接收到XML时,必不可少的就是对其进行解析,捞取有效数据,或者将第三方数据以节点 ...
- XML系列之--Linq操作带属性的XML(四)
关于XML,之前解析过电文收发方面的,就是所谓的带表头.前缀(命名空间)SOAP格式.这次需求是解析一个xml的模板(xls内容),然后填充数据,最后保存.需要时可转换xls.pdf等文件.关于这种带 ...
- Linq对XML的简单操作
前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...
- 比較全的XML系列工具 能够轻松实现排版、转换和打印!
XML系列 --------------------------------------------------------------------------------1.Xsl Formatte ...
- 解析某些特殊格式XML文件时,获取不到根节点问题
还是在语音识别这块.在读取本地的SRGS的XML后,无法获取到根节点<grammar>. 下面是SRGS.XML文件(只给出了根节点) <?xml version="1.0 ...
- [WEB API] CLIENT 指定请求及回应格式(XML/JSON)
[Web API] Client 指定请求及响应格式(xml/json) Web API 支持的格式请参考 http://www.asp.net/web-api/overview/formats-an ...
- 实战:sqlserver 2008 扩展事件-XML转换为标准的table格式
--假设已经存在Event Session删除 IF EXISTS (SELECT * FROM sys.server_event_sessions WHERE name='MonitorLongQu ...
- C#编程基础->XML系列导航
缘由 最近开发的小程序过程中需要涉及到XML相关操作,突然发现自己对于这知识点了解的太少,急需学习加强.刚好项目的时间也不是很紧急,自己就总结XML相关知识点.一个方面自己学习,一个方面也希望可以帮到 ...
随机推荐
- python 反爬虫策略
1.限制IP地址单位时间的访问次数 : 分析:没有哪个常人一秒钟内能访问相同网站5次,除非是程序访问,而有这种喜好的,就剩下搜索引擎爬虫和讨厌的采集器了. 弊端:一刀切,这同样会阻止搜索引擎对网站的收 ...
- dedecms清空所有文章怎么操作?sql语句如何写?
小C新建了一个站,确切的说是复制,出于seo考虑,决定清空所有文章,那么dedecms清空所有文章怎么操作?sql语句如何写呢?特别提醒:修改之前一定要先做好备份,以防万一!下面的语句在迫不得已的情况 ...
- UIKIT_EXTERN和define定义常量
看过我其他的博客的人都知道,我喜欢用define定义常量,最近看了一个开源的轮子,使用UIKIT_EXTERN这个定义的常量,了解了一下,发现使用宏定义的常量会在内存中临时开辟一份内存空间,而使用UI ...
- NYOJ 一笔画
# include<iostream> # include<string> # include<string.h> # include<queue> # ...
- secure CRT常用的查看服务器日志命令
tail -f /(日志文件目录) 查看日志命令ctrl+c停止打印ls -al 查看文件的详细信息路径等vi /(日志文件目录) 打开日志/搜索字符退出:按ESC后,按“:”,输入q, ...
- HyperlinkedIdentityField
1.简介 其实就是创建一个链接,把查询到对象放到链接上,点链接可以查看.实际上用的很少. 2. views代码 查找的是一个对象的所有数据,link只是放在这个对象其中一个字段上的数据. from d ...
- 后台返回路由的数组,然后根事先写好的路由比对如果相等就放到一个数组中https://www.cnblogs.com/zhengrunlin/p/8981017.html
https://www.cnblogs.com/zhengrunlin/p/8981017.html 首先,await fetchPermission()获取后台给的权限数组,格式大概如下 { &qu ...
- springboot + mybatis配置分页插件
一:使用pagehelper配置分页插件 1:首先配置springboot +mybatis框架 参考:http://www.cnblogs.com/liyafei/p/7911549.html 2 ...
- [django]modelform实现的多文件上传
实现效果 代码 models.py from django.db import models import uuid class UUIDTools(object): ""&quo ...
- [django]form的content-type(mime)
form默认的content-type是 'application/x-www-form-urlencoded' 可以修改为多文档: enctype即为mime类型 <form action=& ...