开源.NetCore通用工具库Xmtool使用连载 - XML操作篇

开源,netcore,通用,工具,xmtool,使用,连载,xml,操作 · 浏览次数 : 649

小编点评

**Xml 操作类库** **XmlTool 类** * 提供了一种更方便的方式对 XML 内容进行遍历解析或对特定节点内容的获取。 * 使用回调方法的方式遍历 XML 内容,使读取更灵活快捷。 * 提供将 XML 内容反序列化为对象的能力,方便使用和控制。 **方法** **Iterate 方法** * 从指定文件加载 XML 内容并进行遍历。 * 使用回调函数获取遍历信息参数。 * 支持从文件加载 XML 内容,并支持回调函数。 **IterateFromString 方法** * 从指定字符串加载 XML 内容并进行遍历。 * 使用回调函数获取遍历信息参数。 * 支持从字符串加载 XML 内容,并支持回调函数。 **Deserialize 方法** * 从指定文件加载 XML 内容并进行解析,并将解析内容反序列化为动态对象。 * 支持包含同层级同名称节点的 XML 内容反序列化。 **DeserializeFromString 方法** * 从字符串内容加载 XML 并进行解析,并将解析内容反序列化为动态对象。 * 支持包含同层级同名称节点的 XML 内容反序列化。

正文

【Github源码】


《上一篇》 介绍了Xmtool工具库中的发送短信类库,今天我们继续为大家介绍其中的XML操作类库。


XML操作是软件开发过程中经常会遇到的情况;包括XML内容的遍历解析,或者特定值内容的查询获取等等。Xmtool工具库提供了一种更方便的方式对Xml进行遍历解析或者对特定节点内容的获取,下面将详细说明。

Xmtool工具库中提供了XmlTool类库,用以对Xml内容进行操作。该类库以回调方法的方式遍历XML内容的功能,使得Xml读取更灵活快捷,且能随时停止遍历过程;同时提供了将Xml内容反序列化为对象的能力,通过该方法可以将输入参数方便的转换成对象,更易于使用和控制。

当要使用这些功能时,需先获取XmlTool类库对象:

XmlTool xml = Xmtool.Xml();

针对遍历和反序列化功能根据输入源不同,XmlTool中为每个功能各自提供了 2 个方法。

Xml遍历方法:

Iterate // 从文件加载Xml内容

IterateFromString // 从字符串加载Xml内容

Xml反序列化方法:

Deserialize // 从文件加载Xml内容

DeserializeFromString // 从字符串加载Xml内容

1. Iterate

public void Iterate(string file, XmlNodeInfoGetter callback = null)
说明:从指定文件加载Xml内容并进行遍历,用户通过回调函数获取遍历信息
参数:

file: Xml文件全路径。

callbackXmlNodeInfoGetter类型回调函数,用于Xml节点和属性的读取。

<!--c:\demo.xml-->
<xml>
    <item name="Karl">It's a dog.</item>
    <item name="Tom">It's a cat.</item>
</xml>
private string mTomContent = "";

private bool XmlReader(XmlNodeInfo node)
{
    if (!node.IsEndNode)
    {
        if (node.Path == "/xml/item")	// 当前节点是否/xml/item节点
        {
            if (node.GetAttribute("name") == "Tom")	// 当前节点name属性是否为Tom
            {
                mTomContent = node.Text;	// 获取Tom的说明文本
                return false;	// 退出遍历
            }
        }
    }
    return true;
}

public void GetTomContent(string file)
{
	XmlTool xml = Xmtool.Xml();
    xml.Iterate(file, XmlReader)
}

ReadXml("c:\demo.xml");
Console.WriteLine(mTomContent)

2. IterateFromString

public void Iterate(string content, XmlNodeInfoGetter callback = null)
说明:从指定字符串加载Xml内容并进行遍历,用户通过回调函数获取遍历信息
参数:

content: Xml格式的字符串内容。

callbackXmlNodeInfoGetter类型回调函数,用于Xml节点和属性的读取。

string xmlData = @"<xml>
                	<name>张三</name>
                	<age>18</age>
                	<gender>男</gender>
            	</xml>";

XmlTool xml = Xmtool.Xml();
xml.IterateFromString(xmlData, (XmlNodeInfo node) => 
{
	if (!node.IsEndNode)
    {
        if (node.Path = "/xml/age")
        {
            Console.WriteLine("张三的年龄为:" + node.Text);
            return false;
        }
    }
    return true;
})

3. Deserialize

public dynamic Deserialize(string file, bool includeRoot = false)
说明:从指定文件加载Xml内容并进行解析,将解析内容反序列化为动态对象;暂不支持包含同层级同名称节点的Xml内容反序列化。
参数:

file: Xml文件全路径。

includeRoot:反序列化时是否包含根节点。

<!--c:\demo.xml-->
<person>
    <name>张三</name>
    <age>18</age>
</person>
XmlTool xml = Xmtool.Xml();
dynamic person = xml.Deserialize("c:\demo.xml", false);
Console.WriteLine("张三的年龄为:" + person.name.Value);

4. DeserializeFromString

public dynamic DeserializeFromString(string xml, bool includeRoot = false)
说明:从字符串内容加载Xml并进行解析,将解析内容反序列化为动态对象;暂不支持包含同层级同名称节点的Xml内容反序列化。
参数:

content: Xml格式的字符串内容。

includeRoot:反序列化时是否包含根节点。

string xmlData = @"<xml>
					<person age="18" gender="男">张三</person>
            	</xml>";

XmlTool xml = Xmtool.Xml();
dynamic person = xml.DeserializeFromString(xmlData);
Console.WriteLine("张三的年龄为:" + person.person.age);

附件说明

XmlNodeInfoGetter回调函数

public delegate bool XmlNodeInfoGetter(XmlNodeInfo nodeInfo);
说明:Xml遍历回调函数;Xml遍历到每个节点就会回调该方法一次,参数是遍历到的当前节点。
参数:

nodeInfo:当前节点信息。

名称 类型 说明
Path 属性 当前节点路径,同名路劲不区分;如:/xml/item
FullPath 属性 当前节点路径,区分同名路径;如:/xml/item[1]
LocalName 属性 节点去掉前缀的名称;如:\,该节点LocalName为item。
FullName 属性 节点全名称;如:\,该节点FullName为w:item。
NamespaceURI 属性 当前节点名称前缀对应的命名空间地址;没有前缀为空。
IsRoot 属性 当前节点是否根节点。
IsNode 属性 当前是否节点,起始节点或结束节点。
IsEndNode 属性 当前节点是否为结束节点;如:\
IsEmptyNode 属性 当前节点是否一个空节点;如:\
IsTextNode 属性 当前节点是否一个字符内容的节点。
IsCDATANode 属性 当前节点是否一个CDATA节点;如:\Text
Text 属性 当前节点的的字符串内容;需IsTextNode为true时有效。
CData 属性 当前节点的CDATA内容;需IsCDATANode为true时有效。
Level 属性 当前节点的深度层级。
Line 属性 当前节点在文件中的所在行数。
AttributeCount 属性 当前节点包含属性的个数。
HasAttributes() 方法 当前节点是否包含属性。
GetAttribute(int index) 方法 返回属性位置为index的属性值。
GetAttribute(string name) 方法 返回属性名称为name的属性值。
GetAttribute(string name, string namesapceURI) 方法 返回属性名为name,且name命名空间为namespaceURI的属性值。
GetAttributeName(int index) 方法 返回属性位置为index的属性名称。


【Github源码】

与开源.NetCore通用工具库Xmtool使用连载 - XML操作篇相似的内容:

开源.NetCore通用工具库Xmtool使用连载 - XML操作篇

### [【Github源码】](https://github.com/softwaiter/Xmtool) [《上一篇》](https://www.cnblogs.com/bcbr/p/17447376.html) 介绍了Xmtool工具库中的发送短信类库,今天我们继续为大家介绍其中的XML操作类

开源.NetCore通用工具库Xmtool使用连载 - HTTP请求篇

### [【Github源码】](https://github.com/softwaiter/Xmtool) [《上一篇》](https://www.cnblogs.com/bcbr/p/17608881.html) 介绍了Xmtool工具库中的XML操作类库,今天我们继续为大家介绍其中的HTTP请

开源.NetCore通用工具库Xmtool使用连载 - 加密解密篇

【Github源码】 《上一篇》详细介绍了Xmtool工具库中的正则表达式类库,今天我们继续为大家介绍其中的加密解密类库。 在开发过程中我们经常会遇到需要对数据进行加密和解密的需求,例如密码的加密、接口传输数据的加密等;当前类库中只封装了Base64、AES两种加密解密方法,因为C#提供了几乎我们能

开源.NetCore通用工具库Xmtool使用连载 - 散列算法篇

【Github源码】 《上一篇》详细介绍了Xmtool工具库中的加解密类库,今天我们继续为大家介绍其中的散列算法类库。 散列算法在某些特殊场景也可以当做加密方法使用;其特点是不可逆,同一内容每次散列值绝对一致,所以也可用作对数据内容是否被篡改的校验方法;或者其他需要唯一性编码的场景;本类库提供了MD

开源.NetCore通用工具库Xmtool使用连载 - 随机值篇

【Github源码】 《上一篇》 详细介绍了Xmtool工具库中的散列算法类库,今天我们继续为大家介绍其中的随机值类库。 基于系统提供的Random获取随机值方法已经足够简单和易用,本类库只对日常开发过程中最常用到的生成随机验证码方法进行了封装,后续发现其他有价值的常用随机值需求,会陆续添加到类库中

开源.NetCore通用工具库Xmtool使用连载 - 发送邮件篇

#### [【Github源码】](https://github.com/softwaiter/Xmtool) [《上一篇》](https://www.cnblogs.com/bcbr/p/17393628.html) 介绍了Xmtool工具库中的随机值类库,今天我们继续为大家介绍其中的邮件发送类库

开源.NetCore通用工具库Xmtool使用连载 - 发送短信篇

### [【Github源码】](https://github.com/softwaiter/Xmtool) [《上一篇》](https://www.cnblogs.com/bcbr/p/17421734.html) 介绍了Xmtool工具库中的发送邮件类库,今天我们继续为大家介绍其中的发送短信类库

开源.NetCore通用工具库Xmtool使用连载 - 图形验证码篇

### [【Github源码】](https://github.com/softwaiter/Xmtool) [《上一篇》](https://www.cnblogs.com/bcbr/p/17624230.html) 介绍了Xmtool工具库中的Web操作类库,今天我们继续为大家介绍其中的图形验证码

开源.NetCore通用工具库Xmtool使用连载 - 扩展动态对象篇

【Github源码】 《上一篇》 介绍了Xmtool工具库中的图形验证码类库,今天我们继续为大家介绍其中的扩展动态对象类库。 扩展动态对象是整个工具库中最重要的一个设计。在软件开发过程中,我们经常需要定义各种各样的数据对象;例如:用于参数传递的数据实体类、用于接口返回结果的Json对象等等。 //

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(8)-Ant Design Blazor前端框架搭建

前言 前面的章节我们介绍了一些值得推荐的Blazor UI组件库,通过该篇文章的组件库介绍最终我选用Ant Design Blazor这个UI框架作为ToDoList系统的前端框架。因为在之前的工作中有使用过Ant Design Vue、Ant Design Angular习惯并且喜欢Ant Des