首页 > 其他分享 >开源.NetCore通用工具库Xmtool使用连载 - XML操作篇

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

时间:2023-08-05 23:56:20浏览次数:43  
标签:XML Xml 遍历 string NetCore xml Xmtool 节点 属性

【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源码】

标签:XML,Xml,遍历,string,NetCore,xml,Xmtool,节点,属性
From: https://www.cnblogs.com/bcbr/p/17608881.html

相关文章

  • Spring源码之XML文件中Bean标签的解析1
    读取XML文件,创建对象xml文件里包含Bean的信息,为了避免多次IO,需要一次性读取xml文件中所有bean信息,加入到Spring工厂。读取配置文件newClassPathResource("applicationContext.xml")ClassPathResource是Spring封装的一个类型;Resource接口:可以读取相关资源文件的内容获得......
  • pom.xml
    打包插件<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.4</version>......
  • Android开发 Jetpack Compose 与xml的混合开发AndroidView
    前言  JetpackCompose虽然已经逐渐完善,但是其实还是有很多地方未满足需求。比如播放视频、相机预览等等依然需要原来的View。所以目前阶段JetpackCompose与xml的混合开发非常重要。  官方文档地址:https://developer.android.google.cn/jetpack/compose/migrate/interopera......
  • 6、Spring之基于xml的自动装配
    6.1、场景模拟6.1.1、创建UserDao接口及实现类packageorg.rain.spring.dao;/***@authorliaojy*@date2023/8/5-11:05*/publicinterfaceUserDao{voidsaveUser();}packageorg.rain.spring.dao.impl;importorg.rain.spring.dao.UserDao;/**......
  • .NetCore + Selenium IIS 部署踩坑记
    一、问题   使用Selenium+chromedriver开发自动操作页面demo,本地调试使用IISExpress正常,部署到IIS访问接口代码正常执行,但是,但是页面并没有启动二、排查  网上找相似情况大概以下几种 1,chromedriver和chrome的版本不一致 2,IIS用户权限 3,代码写法问题 本......
  • vb.net Linq XML Xdocument Descendants 为空
    在使用xdocumentdesendants进行筛选元素时,发现结果为空 经过网友的文章提醒发现是命名空间的问题在使用linqwhere进行网页元素筛选时发现descendants("div")不起作用,而是用descendatns可以看到元素枚举DimieAsIEnumerable(OfXElement)=ex1.Descendant......
  • day123- 自动装配xml
    基于xml的自动装配自动装配根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值模拟controllerpublicclassUserController{privateUserServiceuserService;​publicUserServicegetUserService(){......
  • freeswitch的mod_xml_curl模块动态获取dialplan
     概述freeswitch是一款简单好用的VOIP开源软交换平台。mod_xml_curl模块支持从web服务获取xml配置,本文介绍如何动态获取dialplan配置。环境centos:CentOS release7.0(Final)或以上版本freeswitch:v1.6.20GCC:4.8.5dialplan查找流程我们在“switch_xml_parse_file”函......
  • Spring-1-透彻理解Spring XML的Bean创建--IOC
    学习目标上一篇文章我们介绍了什么是Spring,以及Spring的一些核心概念,并且快速快发一个Spring项目,实现IOC和DI,今天具体来讲解IOC能够说出IOC的基础配置和Bean作用域了解Bean的生命周期能够说出Bean的实例化方式一、Bean的基础配置问题导入问题1:在<bean>标签上如何配置别名......
  • python爬虫学习小记——lxml板块
    python爬虫学习小记——lxml板块lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。XPath的选择功能......