C# 对xml进行操作
一:xml的基本操作
(1)获得xml文件中的数据
//创建xml文档对象 XmlDocument xmlDoc = new XmlDocument(); //将指定xml文件加载xml文档对象上
xmlDoc.Load("D:/Documents/Visual Studio 2013/Projects/ReadXMLFile/ReadXMLFile/Customers.xml"); //表示文档中的单个节点
XmlNode node; //选择匹配 参数XPath 表达式的第一个 XmlNode。
node = xmlDoc.SelectSingleNode("config/username"); //获取或设置节点及其所有子节点的串联值。
string username = node.InnerText;
node = xmlDoc.SelectSingleNode("config/password");
string password = node.InnerText;
(2)将数据按照对应的字节逐个保存到另一个xml文件中
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
XmlNode node;
node = xmlDoc.SelectSingleNode("config/username");
if (node == null)
{
//创建节点
XmlElement n = xmlDoc.CreateElement("username");
//对节点属性值进行赋值
n.InnerText = username;
//将所创节点添加到已有节点后面
xmlDoc.SelectSingleNode("config").AppendChild(n);
}
else
{
node.InnerText = username;
}
node = xmlDoc.SelectSingleNode("config/password");
if (node == null)
{
XmlElement n = xmlDoc.CreateElement("password");
n.InnerText = password;
xmlDoc.SelectSingleNode("config").AppendChild(n);
}
else
{
node.InnerText = password;
}
//将xml文档对象保存到指定的xml文件中
xmlDoc.Save(Xpath);
(3)将包含xml的字符串保存为一个xml文件
StreamReader str = new StreamReader("D:/Documents/Visual Studio 2013/Projects/ReadXMLFile/ReadXMLFile/Customers.xml");
string readerXML = str.ReadToEnd();
str.Close();
此三句代码只是为了得到一个包含xml的字符串
//创建一个xml文档
XmlDocument xDoc = new XmlDocument();
//将指定字符串加载到xml文档对象中
xDoc.LoadXml(readerXML);
//将xml文档对象保存到指定文件中(若此文件不存在会自行创建)
xDoc.Save("D:/Documents/Visual Studio 2013/Projects/ReadXMLFile/ReadXMLFile/Response1.xml");
二:下面是之前写的一个项目中的一段代码,其功能是将xml文档转换成不带标签的有效对象。
C#内部封装的类库"namespace System.Net.Http class HttpClient",
(1)此内部有进行请求所用的方法此处用得时Post的异步请求,此时的请求头是固定的先忽略:
public class Post
{
private static readonly HttpClient _httpClient; //创建类库成员变量,以注入的方式进行方法调用
public async Task<string> PostAsync(string fileName, string url = "https://webservices3.sabre.com")
{
string result = string.Empty;
try
{
StreamReader sr = new StreamReader(fileName, Encoding.UTF8); //以一种特定的编码用字节流读取指定文件
string postContent = sr.ReadToEnd(); //从当前位置到末尾读取全部字节
sr.Close(); //关闭流
StringContent httpContent = new StringContent(postContent, Encoding.UTF8, "text/xml"); //基于字符串创建HTTP新实例,即将数据内容以特定编码写成特定格式的字符串新实例
var response = await _httpClient.PostAsync(url, httpContent); //以异步操作将 POST 请求发送给指定 URI,返回异步操作的任务对象(此对象形式根据请求文档规定可得到,此处为xml)
result = await response.Content.ReadAsStringAsync(); //获取HTTP响应消息内容并将内容写入异步流进行读取,得到包含xml的字符串(其存在节点,拥有xml文档的一切特性)
}
catch (Exception ex)
{
result = ex.Message;
}
return result;
}
}
小结:首先要搞清楚如果对方接口接受请求的数据包是xml形式的,即使它是文档,也可以看做是有一种特定格式字符串。首先是直接将请求信息写成xml文件,然后用流读取此文件内容,使其转换成包含xml的字符串
(若对方要求将数据进行压缩也只是提高传输速度)
(2)对于此返回数据可以利用节点的读取进行有效数据的提取:
1:此xml中包含哪些命名空间要得到
2:从包含xml的字符串中得到根结点
3:利用Linq语法对此xml类型的字符串进行提取有效信息,并将这些数据赋给所需对象的实例
public class Connect
{
private string xmlFilePath = @"F:\API\NewSabreApi\Sabre.Api\TestWinForm\Xml\"; //此Xml文件夹下有好多xml文件
public void getData()
{
Post post=new Post();
var response=post.PostAsync(xmlFilePath + "BargainFinderMaxRs.xml");
//命名空间
XNamespace xsi = "http://www.opentravel.org/OTA/2003/05";
XNamespace soap_env = "http://schemas.xmlsoap.org/soap/envelope/";
XNamespace eb = "http://www.ebxml.org/namespaces/messageHeader";
XNamespace wsse = "http://schemas.xmlsoap.org/ws/2002/12/secext";
try
{
//从包含xml的字符串中得到根结点
XElement root = XElement.Parse(response);
#region
//根据节点提取数据并得到所要对象,此对象有可能是个对象集合,若要得到单个Segments对象需要对其进行遍历
var flightSegments = from flight in root.Elements(soap_env + "Body").Elements(xsi + "OTA_AirLowFareSearchRS")
.Elements(xsi + "PricedItineraries")
.Elements(xsi + "PricedItinerary")
select new Segments
{
carrier = flight.Element(xsi + "OperatingAirline").Attribute("Code").IsNamespaceDeclaration ? null :
(string)flight.Element(xsi +"OperatingAirline").Attribute("Code").Value,
depAirport = (string)flight.Element(xsi + "DepartureAirport").Attribute("LocationCode") == null ? null :
(string)flight.Element(xsi + "DepartureAirport").Attribute("LocationCode"),
depTime = DateTime.Parse(flight.Attribute("DepartureDateTime") == null ? null :
flight.Attribute("DepartureDateTime").Value).ToString("yyyyMMddHHmm"),
}
foreach(var flight in flightSegments)
{
//此处便可得到Segments类型的单个对象实例
//此时便可对此对象实例flight进行业务需求的操作
}
}
catch (Exception ex)
{
tbResult.Text = ex.Message;
}
}
}
C# 对xml进行操作的更多相关文章
- VS2012 Unit Test —— 我对IdleTest库动的大手术以及对Xml相关操作进行测试的方式
[1]我的IdleTest源码地址:http://idletest.codeplex.com/ [2]IdleTest改动说明:2013年10月份在保持原有功能的情况下对其动了较大的手术,首先将基本的 ...
- sql server中对xml进行操作
一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XM ...
- 对XML的操作
对XML的操作主要使用到的语法示例: using System.Xml; private static string XmlMarketingStaff = AppDomain.CurrentDoma ...
- Xml通用操作类
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml ...
- C# XML流操作简单实例
这里我们先介绍操作XML文件的两个对象:XmlTextReader和XmlTextWriter打开和读取Xml文件使用到的对象就是XmlTextReader对象.下面的例子打开了与程序在同一路径下的一 ...
- SQL Server 2008 对XML 数据类型操作
原文 http://www.cnblogs.com/qinjian123/p/3240702.html 一.前言 从 SQL Server 2005 开始,就增加了 xml 字段类型,也就是说可以直接 ...
- 我来讲讲在c#中怎么进行xml文件操作吧,主要是讲解增删改查!
我把我写的四种方法代码贴上来吧,照着写没啥问题. 注: <bookstore> <book> <Id>1</Id> <tate>2010-1 ...
- 由“Jasperrpeorts 4.1.2升级到5.1.2对flex项目的解析”到AS3 带命名空间的XML的操作
原文同步至:http://www.waylau.com/from-jasperrpeorts-4-1-2-upgraded-to-5-1-2-parsing-of-flex-projects-to-t ...
- xml常用操作(js、sql、vb)
我们经常会用到xml操作,如下介绍了js.sql.vb等对xml的操作. JS创建xml对象 //创建对象 function getDataXML() { var objTds = $(&qu ...
- Python实现XML的操作
本文从以下两个方面, 用Python实现XML的操作: 一. minidom写入XML示例1 二. minidom写入XML示例2 三. ElementTree写入/修改示例 四. ElementTr ...
随机推荐
- Git添加远程报错:remote origin already exists.
在本地创建了一个Git仓库,如何在Github创建一个Git仓库,并且让这两个仓库进行远程同步,这样Github上的仓库既可以作为备份仓库,还可以通过该仓库进行多人协作. 1.登录github,建立一 ...
- 织梦dedecms单标签、双标签
标签是dedecms的核心,dedecms的标签也跟html标签一样,同样分单标签和双标签. 我不会讲单标签有那些,双标签有那些,也不会叫大家去背那些是单标签,那些是双标签.如果去背这些标签,这样学起 ...
- thinkphp 单字母函数
在ThinkPHP中有许多使用简便的单字母函数(即快捷方法),可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找. 1.U() URL组装 支持不同UR ...
- 静态库 .a 转成共享库 .so
.a 是有一系列 .o 文件通过 ar 程序打包在一起的静态库,要把它转成动态库只需先解开,生成一堆 .o 文件,再通过编译器(比如 gcc 或 ifort,视具体情况而定)编成动态库即可. ar - ...
- Spring事务管理注意小事项
在service类前加上@Transactional,声明这个service所有方法需要事务管理.每一个业务方法开始时都会打开一个事务. Spring默认情况下会对运行期例外(RunTimeExcep ...
- 使用juggle简化网络编程
常规的网络编程,在消息处理上大概会采用如下方式 struct msg{ int msg_id; int msg_len; //...msg_info }; 定义如上的消息结构 接收方接收后,按如上的消 ...
- 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...
- 【Android Developers Training】 36. 设置文件共享
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 文档模型(JSON)使用介绍
一.背景 E.F.Codd在1970年首次提出了数据库系统的关系模型,从此开创了数据库关系方法和关系数据理论的研究,为数据库技术奠定了理论基础,数据库技术也开始蓬勃发展.而随着几大数据库厂商陆续发布的 ...
- 真机调试方法- IOS/Android移动设备
真机调试 调试安卓 方法一 开启手机的USB调试 安装运行项目 使用chrome步骤如下图 打开开发者工具 打开设备管理 选择设备进行debug 方法二: 直接在地址栏输入chrome://inspe ...