public static void ReadXML(string xmlUrl)
{
//判断文件是否存在
if (!File.Exists(xmlUrl))
{
Console.WriteLine($"文件路径不正确,没有查找到请确认路径:{xmlUrl}");
return;
}
//加载文档
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档里面的注释
XmlDocument doc = new XmlDocument();
doc.Load(xmlUrl);
XmlNamespaceManager nameSpace = new XmlNamespaceManager(doc.NameTable);
nameSpace.AddNamespace("xs", "http://centiro.com/deliveryxml.xsd");
XmlElement resume = doc.DocumentElement;
//得到根节点shipments
XmlNode rootNode = resume;
// 得到根类shipment
XmlNode root = resume.SelectSingleNode("xs:shipment", nameSpace);
//XmlNode root = doc.ChildNodes.Item(0).ChildNodes.Item(0);
//得到shipment的子节点
//XmlNodeList rootAtt = root.ChildNodes;
//读取节点数据打印
foreach (XmlNode item in root)
{
Console.WriteLine($"当前节点名称:{item.Name.ToString()},---值:{item.InnerText.ToString()}"); }
//读取节点需要转化到数据库根据类名称
//XMLToClass(root, nameSpace);
shipment shipment = DeserializeXML<shipment>(rootNode.InnerXml); if (root.SelectSingleNode("xs:addresses", nameSpace) != null)
{
XmlNode addresses = root.SelectSingleNode("xs:addresses", nameSpace);
List<address> addressList = new List<address>();
foreach (XmlNode item in addresses)
{
address addre = new address();
Console.WriteLine($"------------------------------【addresses】-------------------------------------");
Console.WriteLine($"当前节点名称:{item.Name.ToString()},---值:{item.InnerText.ToString()}");
string xmlStr = "<address>" + item.InnerXml + "</address>";
addressList.Add(DeserializeXML<address>(xmlStr));
}
shipment.addresses = addressList;
} //如果需要转义保存
// doc.Save(@"textSave.xml"); }

然后下面是两种xml解析成对象的形式:

第一种变量赋值-很low:

 public static void XMLToClass(XmlNode root, XmlNamespaceManager nameSpace)
{
//读取节点需要转化到数据库根据类名称
shipment shipment = new shipment();
shipment.operation = root.SelectSingleNode("xs:operation", nameSpace).InnerText;
shipment.deliveryMethod = root.SelectSingleNode("xs:deliveryMethod", nameSpace) == null ? "" : root.SelectSingleNode("xs:deliveryMethod", nameSpace).InnerText;
shipment.timeWindowDateFrom = root.SelectSingleNode("xs:timeWindowDateFrom", nameSpace).InnerText;
shipment.timeWindowDateTo = root.SelectSingleNode("xs:timeWindowDateTo", nameSpace).InnerText;
if (root.SelectSingleNode("xs:exchange", nameSpace) != null)
{
shipment.exchange = root.SelectSingleNode("xs:exchange", nameSpace).InnerText == "True" ? true : false;
}if (root.SelectSingleNode("xs:addresses", nameSpace) != null)
{
XmlNode addresses = root.SelectSingleNode("xs:addresses", nameSpace);
foreach (XmlNode item in addresses)
{
address addre = new address();
Console.WriteLine($"------------------------------【addresses】-------------------------------------");
Console.WriteLine($"当前节点名称:{item.Name.ToString()},---值:{item.InnerText.ToString()}");
DeserializeXML<address>(addresses.InnerXml); }
}
}

第二种序列化类实现:

 public static T DeserializeXML<T>(string xmlStr)
{
//序列化前
xmlStr = xmlStr.Replace("xmlns=\"http://centiro.com/deliveryxml.xsd\"", "");
//序列化
using (StringReader reader = new StringReader(xmlStr))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
NameTable nt = new NameTable();
XmlNamespaceManager nsManager = new XmlNamespaceManager(nt);
nsManager.AddNamespace("one", "http://centiro.com/deliveryxml.xsd");
XmlParserContext context = new XmlParserContext(null, nsManager, null, XmlSpace.None);
XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
xmlReaderSettings.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader xmlReader = System.Xml.XmlReader.Create(reader);
return (T)serializer.Deserialize(xmlReader);
}
}

这种最主要需要在类的上面添加:

[XmlRoot(Namespace = "", IsNullable = false, ElementName = "address")]

XML记一次带命名空间的xml读取的更多相关文章

  1. C#读取带命名空间的xml,xaml文件的解决方案

    使用C#读取xml文件有三种常用的方式: 1.xmlDocument 2.XmlTextReader 3.Linq To Xml 但是这些方式在读写有些带命名空间的xml时就不知道怎么办了(例如把xa ...

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

  3. 带命名空间的XML的dom4j应用<转>

    Element root = document.getRootElement();     List   recordenvlist = document.selectNodes("//gm ...

  4. dom4j解析带命名空间的xml文件

    文件内容如下 <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=& ...

  5. C#读取带命名空间的xml

    首先带有命名空间的xml读取可以使用Xml.Linq,也可以使用xpath,本文将采用xpath的方式解析. 原文参考了:https://www.cnblogs.com/duanjt/p/544054 ...

  6. Linq to xml 操作带命名空间的xml

    昨天需要操作用代码操作csproj文件,实现不同vs版本的切换. 在用XElement读取了csproj文件以后怎么也获取不到想要的对象. 反反复复试验了好多次都不得要领:先看下csproj文件的内容 ...

  7. linq检索带命名空间的xml

    XElement el = XElement.Load(fil); XNamespace ns = "http://schemas.microsoft.com/ado/2009/11/edm ...

  8. Linq to Xml读取复杂xml(带命名空间)

    前言:xml的操作方式有多种,但要论使用频繁程度,博主用得最多的还是Linq to xml的方式,觉得它使用起来很方便,就用那么几个方法就能完成简单xml的读写.之前做的一个项目有一个很变态的需求:C ...

  9. Linq创建带命名空间、前缀、Soap格式的XML

    关于XML,我也是刚接触,关于一般常见的XML,博客园.CSDN上的资料很多,对于不常见的带命名空间.前缀.Soap格式的XML的描述相对来说寥寥无几,上一篇我写到了对相对复杂的XML的读操作,下面说 ...

随机推荐

  1. Flutter 页面入栈和出栈

    Docs demo import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp ...

  2. 03-es6语法 Promise 和 es8语法 async await 的了解和基本使用

    //Promise // 1.说明 : Promise 是 es6 中提出的新语法 // 2.作用 : 用 '用户编写同步代码' 的方式 '处理异步' 的一种解决方案 // 3.以前 : 处理异步 , ...

  3. CentOS 7 安装配置 OpenVPN 客户端

    安装 epel yum 源: $ rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm $ ...

  4. 【转载】看StackOverflow如何用25台服务器撑起5.6亿的月PV

    问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 亿 ...

  5. Java二叉树实现及递归与非递归遍历实现

    树的遍历分两种:1.深度优先遍历 1.1 递归算法实现 2.2 非递归算法实现(使用栈存储)2.广度优先遍历(使用队列存储) import java.util.*; /** * 类功能描述: 二叉树遍 ...

  6. Java中的方法(形参及实参)return返回类型

    如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 pub ...

  7. python-函数参数

    1.Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码 1).位 ...

  8. Java第三次上机随笔

    就记录一下新的收获吧~ 1.定点数(BigDecimal) 先区分一下浮点数和定点数: 浮点数(float/double):小数点可以任意浮动,称为浮点表示法 定点数(BigDecimal):一种数约 ...

  9. javascript 使用小技巧总结

    按位取反 ~a 即:返回 -(a+1),会去掉小数点. let a = 3.14; let b = ~a; //b = -(3.14+1) 取整 为-4: let c = ~b; //c = -(-4 ...

  10. Python—day17时间模块、系统模块、递推遍历、序列化

    一.time'''时间戳(timestamp):time.time()延迟线程的运行:time.sleep(secs)(指定时间戳下的)当前时区时间:time.localtime([secs])(指定 ...