一: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进行操作的更多相关文章

  1. VS2012 Unit Test —— 我对IdleTest库动的大手术以及对Xml相关操作进行测试的方式

    [1]我的IdleTest源码地址:http://idletest.codeplex.com/ [2]IdleTest改动说明:2013年10月份在保持原有功能的情况下对其动了较大的手术,首先将基本的 ...

  2. sql server中对xml进行操作

    一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XM ...

  3. 对XML的操作

    对XML的操作主要使用到的语法示例: using System.Xml; private static string XmlMarketingStaff = AppDomain.CurrentDoma ...

  4. Xml通用操作类

    using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml ...

  5. C# XML流操作简单实例

    这里我们先介绍操作XML文件的两个对象:XmlTextReader和XmlTextWriter打开和读取Xml文件使用到的对象就是XmlTextReader对象.下面的例子打开了与程序在同一路径下的一 ...

  6. SQL Server 2008 对XML 数据类型操作

    原文 http://www.cnblogs.com/qinjian123/p/3240702.html 一.前言 从 SQL Server 2005 开始,就增加了 xml 字段类型,也就是说可以直接 ...

  7. 我来讲讲在c#中怎么进行xml文件操作吧,主要是讲解增删改查!

    我把我写的四种方法代码贴上来吧,照着写没啥问题. 注: <bookstore> <book> <Id>1</Id> <tate>2010-1 ...

  8. 由“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 ...

  9. xml常用操作(js、sql、vb)

    我们经常会用到xml操作,如下介绍了js.sql.vb等对xml的操作. JS创建xml对象 //创建对象 function getDataXML() {     var objTds = $(&qu ...

  10. Python实现XML的操作

    本文从以下两个方面, 用Python实现XML的操作: 一. minidom写入XML示例1 二. minidom写入XML示例2 三. ElementTree写入/修改示例 四. ElementTr ...

随机推荐

  1. 20+行代码使用es5 Object.defineProperty 实现简单的watch功能

    /** * 一个简单的demo 帮助理解defineProperty,只对Object类型参数有效 */ $watch=function(myObject,callback){ function in ...

  2. Thread初探

    Thread初探 前言 以前大家写的都是单线程的程序,全是在main函数中调用方法,可以清楚的看到它的效率是特别低的,就像python中使用单线程取爬一个网站,可以说能让你等的吐血,因为数据量实在太大 ...

  3. Linux命令 查看文件内容

    cat [功能说明] 查看文件的内容  #cat本身是一个串接命令,把指定一个或多个源文件的内容,利用>符号重定向到目标文件中,如果不指定重定向文件,则默认在标准输出设备上显示.此时,可以利用c ...

  4. flask笔记二

    web表单 web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互. 1.用Flask-WTF来处理表单 (1)在根目录下编辑扩展配置--config.py CSRF_ENABLE ...

  5. golang 私钥"加密"公钥"解密"

    ---恢复内容开始---   之前工作主要使用C/C++与银行/第三方支付对接,但C/C++无法满足客户"当天给协议明天实盘上载"的开发速度以及现公司一些特殊情况,所以决定用go来 ...

  6. Jquery DataTables 使用AJAX POST的问题

    最近项目在用需要用表格,听说DataTables很好很强大,于是用了一下. Get请求没什么问题,问题处在POST请求上 Jquery原生的POST请求没有问题,代码如下 $.ajax({   url ...

  7. 解决Socket粘包问题——C#代码

    解决Socket粘包问题——C#代码 前天晚上,曾经的一个同事问我socket发送消息如果太频繁接收方就会有消息重叠,因为当时在外面,没有多加思考 第一反应还以为是多线程导致的数据不同步导致的,让他加 ...

  8. iOS 实现简单的毛玻璃效果

    最近在整理导航栏的渐隐渐现效果,整理过程中偶然学会了图片的毛玻璃效果实现,很简单,不多说了,先上图看看效果对比, 这是原图, 这是加了效果后的,创建图片的代码就不上了,下面看下添加效果的代码: // ...

  9. [leetcode-565-Array Nesting]

    A zero-indexed array A consisting of N different integers is given. The array contains all integers ...

  10. vijos1056题解

    题目: 桌面上放了N个平行于坐标轴的矩形,这N个矩形可能有互相覆盖的部分,求它们组成的图形的面积. 在翻题目时,偶然发现了这道标号为WA的题目. 原来,以前我把一中培训的代码发了上去,却WA了4个点, ...