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

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

时间:2023-08-26 18:33:50浏览次数:46  
标签: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文件全路径。

callback:XmlNodeInfoGetter类型回调函数,用于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格式的字符串内容。

callback:XmlNodeInfoGetter类型回调函数,用于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 属性 节点去掉前缀的名称;如:<w:item name="softwaiter"/>,该节点LocalName为item。
FullName 属性 节点全名称;如:<w:item name="softwaiter"/>,该节点FullName为w:item。
NamespaceURI 属性 当前节点名称前缀对应的命名空间地址;没有前缀为空。
IsRoot 属性 当前节点是否根节点。
IsNode 属性 当前是否节点,起始节点或结束节点。
IsEndNode 属性 当前节点是否为结束节点;如:</item>
IsEmptyNode 属性 当前节点是否一个空节点;如:<item/>
IsTextNode 属性 当前节点是否一个字符内容的节点。
IsCDATANode 属性 当前节点是否一个CDATA节点;如:<item><![CDATA[hello]]</item>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://blog.51cto.com/u_16229237/7245730

相关文章

  • 无涯教程-Python - XML处理
    XML是一种可移植的开放源语言,它使程序员能够开发可由其他应用程序读取的应用程序,而无需考虑操作系统和/或开发语言。可扩展标签语言(XML)是一种类似于HTML或SGML的标签语言。万维网联盟建议这样做,并且可以作为开放标准使用。XML对跟踪少量到中等数量的数据而无需基于SQL的主干......
  • 开源.NetCore通用工具库Xmtool使用连载 - 发送短信篇
    【Github源码】《上一篇》介绍了Xmtool工具库中的发送邮件类库,今天我们继续为大家介绍其中的发送短信类库。发送短信就像发送邮件一样,在软件系统中使用非常普遍,甚至比发送邮件还要常见,有些甚至是软件标配功能;例如现在的短信验证码登录、通过短信找回密码等等。发送短信需要通过......
  • .NetCore WebAPI 导入、导出Excel文件 导入
    先下载一个NuGet包 在接口写方法//导入[HttpPost][Route("Import")]publicIActionResultImportExcel()//IFormFileformFile{try{varformFile=HttpContext.Request.Form.Files[0];//......
  • 盘点10个.NetCore实用的开源框架项目
    连续分享.Net开源项目快3个月了,今天我们一起梳理下10个,比较受到大家欢迎的.NetCore开源框架项目。更多开源项目,可以查看我创建的,.Net开源项目榜单!一个专注收集.Net开源项目的榜单​github.com/bianchenglequ/netcodetop1、FytSoaCms前后端分离CMS系统项目简介这是一个基于.N......
  • Microsoft.AspNetCore.Identity
    前言用户模块几乎是每个系统必备的基础功能,如果每次开发一个新项目时都要做个用户模块,确实非常无聊。好在asp.netcore给我们提供了Identity,使用起来也是比较方便,如果对用户这块需求不是非常个性化的话,identity是一个不错的选择。ASP.NETCoreIdentity:是一个API,它支持用......
  • IntelliJ IDEA maven配置,设置pom.xml的配置文件
    IntelliJIDEA项目,选择 文件 设置,弹窗构建、执行、部署构建工具Maven就可以maven配置好以后,在pom.xml的配置文件中就可以设置对应的jar包了,这样构建的时候自动需要的jar,在项目中导入即  需要的jar包设置在pom.xml中设置即可,仓库:https://mvnrepository.com/,aliyun仓......
  • dockerfile netcore 示例
    #syntax=docker/dockerfile:1FROMmcr.microsoft.com/dotnet/sdk:7.0asbuild-envWORKDIR/appCOPY..RUNdotnetrestoreRUNdotnetpublish-cRelease-o/publishFROMmcr.microsoft.com/dotnet/aspnet:7.0asruntimeWORKDIR/srcCOPY--from=build......
  • XML
    什么是xml以及他的作用第一个xml示范文件<?xmlversion="1.0"encoding="UTF-8"?><!--<?xmlversion="1.0"encoding="UTF-8?>以上内容就是xml文件的声明version="1.0"version表示xml的版本encoding="UTF-8?encoding表示xml文......
  • webbrowser显示xml, xml通过xslt转xhtml
    为WebBrowser控件增加显示XML文档接口(c#)ShowXMLinWebBrowsercontrol https://learn.microsoft.com/en-us/answers/questions/1181957/show-xml-in-webbrowser-controlViewXMLFilesEasilywithXmlGridViewControlhttps://www.codeproject.com/articles/16497/view-xml......
  • 读取转换规则中的单据类型映射(处理SQLSERVER的XML字段)
    DataSetdsBillTypeMap=null;stringsql=string.Format(@"/*dialect*/SELECTFKERNELXML.query('//BillTypeMaps')BillTypeMaps,FID......