XML简介及两种C#读取方式_vba preservewhitespace-程序员宅基地

XML简介及两种C#读取方式

XML作用

    对于XML,想必各位都比较了解,我也就不用费笔墨来描述它是什么了,我想在未来的Web开发中XML一定会大放异彩,XML是可扩展标记语言,使用它企业可以制定一套自己的数据格式。用于Internet的数据传输,我想,这是XML对于我们这些程序员最诱人的地方!

    我们今天的主题不是论述XML的好处,而是讨论在C#中如何使用XML。下面我们来了解一下使用程序访问XML的一些基础理论知识。

访问的两种模型:

    在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作。虽然是各有千秋,但我们也可以在程序中两者并用实现优劣互补嘛,呵呵

一、DOM文档对象模型操作

using System.Xml;

XmlDocument xml=new XmlDocument();//初始化一个xml实例
xml.Load(path);//导入指定xml文件
xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));
XmlNode root=xml.SelectSingleNode("/root");//指定一个节点
XmlNodeList childlist=root.ChildNodes;//获取节点下所有直接子节点
XmlNodeList nodelist=xml.SelectNodes("/Root/News");//获取同名同级节点集合
string id=node.Attributes["id"].Value;//获取指定节点的指定属性值
string content=node.InnerText;//获取指定节点中的文本
root.HasChildNodes;//判断该节点下是否有子节点
复制代码
<?xml version="1.0" encoding="utf-8" ?>
<taobaoke_items_get_response>
      <taobaoke_items list="true">
            <taobaoke_item>
            <num_iid>21998240478</num_iid>
            <price>88.00</price>
            <title>多聚2013春装新品夏新款韩版蕾丝连衣裙 长袖</title>
        </taobaoke_item>
      
            <taobaoke_item>
            <num_iid>19019979485</num_iid>
            <price>152.00</price>
            <title>冲皇冠 韩版修身雪纺打底春装 新款白色蕾丝连衣裙夏</title>
        </taobaoke_item>
      
            <taobaoke_item>
            <num_iid>18984395601</num_iid>
            <price>98.00</price>
            <title>韩版热卖2013春装新大码长袖修身蕾丝连衣裙拼接蕾丝打底裙</title>
        </taobaoke_item>
      
            <taobaoke_item>
            <num_iid>22646972463</num_iid>
            <price>108.00</price>
            <title>2013春装新品韩大码修身打底女裙翻领春季新款长袖连衣裙</title>
        </taobaoke_item>
      
            <taobaoke_item>
            <num_iid>14559482917</num_iid>
            <price>29.00</price>
            <title>2013春装新款 春连衣裙 夏季V领修身百搭时尚打底裙子</title>
        </taobaoke_item>
      </taobaoke_items>
      <total_results>99999999999</total_results>
</taobaoke_items_get_response>
复制代码

 注:这里的集合可以是

<num_iid>14559482917</num_iid>
<price>29.00</price>
<title>2013春装新款 春连衣裙 夏季V领修身百搭时尚打底裙子</title>
------------------------------------------------------
<total_results>777777</total_results>
<total_results>888888</total_results>
<total_results>999999</total_results>
 
复制代码
string xmlFilePath = @"G:\test\tt\Pu_list.xml";
            XmlDocument doc = new XmlDocument();
            doc.Load(xmlFilePath);

            XmlNodeList NodeList_total = doc.SelectNodes("/taobaoke_items_get_response/total_results");//total_results集合
            if (NodeList_total.Count != 0)
            {
                string total_results = NodeList_total.Item(0).InnerText;//total_results集合,第1个total_results节点下的所有文本值
                Response.Write(total_results);
                Response.Write("</br>");
            }

            XmlNodeList NodeList_item = doc.SelectNodes("/taobaoke_items_get_response/taobaoke_items/taobaoke_item");
            if (NodeList_item.Count != 0)
            {
                foreach (XmlNode Node in NodeList_item)
                {
                    XmlNodeList taobaoke_item = Node.ChildNodes;//taobaoke_item集合,第1个taobaoke_item下的所有节点(num_iid、price、title)组成集合
                    Response.Write("ID:"); Response.Write(taobaoke_item.Item(0).InnerText);//(num_iid、price、title)集合,num_iid下的所有文本值
                    Response.Write("-----------价格:"); Response.Write(taobaoke_item.Item(1).InnerText);//(num_iid、price、title)集合,price下的所有文本值
                    Response.Write("-----------标题:"); Response.Write(taobaoke_item.Item(2).InnerText);//(num_iid、price、title)集合,title下的所有文本值
                    Response.Write("</br>");

                }

                Response.Write(NodeList_item.Item(0).InnerText);//taobaoke_item节点集合,第1个taobaoke_item下的所有文本值
            }
复制代码

 

 1.XmlDocument类的属性

   XmlDocument类的属性及说明如下表所示。

属性

说明

Attributes

当前节点的属性集合

BaseURI

当前节点的基URI

ChildNodes

节点的所有子节点

DocumentElement

文档的根

DocumentType

DOCTYPE 声明的节点

FirstChild

节点的第一个子节点

HasChildNodes

是否有任何子节点

Implementation

获取当前文档的 XmlImplementation对象

InnerText

节点包含的所有文本内容

InnerXml

节点所包含的所有XML内容

IsReadOnly

当前节点是否是只读的

Item

获取指定的子元素

LastChild

最后一个子节点

LocalName

获取节点的本地名称

Name

获取节点的限定名

NamespaceURI

获取该节点的命名空间 URI

NameTable

获取与此实现关联的 XmlNameTable

NextSibling

获取紧接在该节点之后的节点

NodeType

获取当前节点的类型

OuterXml

获取表示此节点及其所有子节点的标记

OwnerDocument

获取当前节点所属的 XmlDocument

ParentNode

获取该节点(对于可以具有父级的节点)的父级

Prefix

获取或设置该节点的命名空间前缀

PreserveWhitespace

获取或设置一个值,该值指示是否在元素内容中保留空白

PreviousSibling

获取紧接在该节点之前的节点

SchemaInfo

返回节点的后架构验证信息集 (PSVI)

Schemas

获取或设置与此 XmlDocument 关联的 XmlSchemaSet 对象

Value

获取或设置节点的值

XmlResolver

设置 XmlResolver 以用于解析外部资源

  2.XmlDocument类的方法

   XmlDocument类的方法及说明如下表所示。

方法

说明

AppendChild

将指定的节点添加到该节点的子节点列表的末尾

CreateAttribute

创建具有指定名称的 XmlAttribute

CreateCDataSection

创建包含指定数据的 XmlCDataSection

CreateComment

创建包含指定数据的 XmlComment

CreateDocumentFragment

创建 XmlDocumentFragment

CreateDocumentType

返回新的 XmlDocumentType 对象

CreateElement

创建 XmlElement

CreateEntityReference

创建具有指定名称的 XmlEntityReference

CreateNavigator

创建一个用于导航此文档的新 XPathNavigator 对象

CreateNode

创建 XmlNode

CreateProcessingInstruction

创建一个具有指定名称和数据的 XmlProcessingInstruction

CreateSignificantWhitespace

创建一个 XmlSignificantWhitespace 节点

CreateTextNode

创建具有指定文本的 XmlText

CreateWhitespace

创建一个 XmlWhitespace 节点

CreateXmlDeclaration

创建一个具有指定值的 XmlDeclaration 节点

GetElementById

获取具有指定 ID 的 XmlElement

GetElementsByTagName

返回一个 XmlNodeList ,它包含与指定名称匹配的所有元素的列表

GetNamespaceOfPrefix 

查找当前节点范围内离给定的前缀最近的 xmlns 声明,并返回声明中的命名空间 URI

GetPrefixOfNamespace 

查找当前节点范围内离给定的命名空间 URI 最近的 xmlns 声明,并返回声明中定义的前缀

GetType

获取当前实例的 Type

ImportNode

将节点从另一个文档导入到当前文档

InsertAfter

将指定的节点紧接着插入指定的引用节点之后

InsertBefore

将指定的节点紧接着插入指定的引用节点之前

Load

加载指定的 XML 数据

LoadXml

从指定的字符串加载 XML 文档

Normalize 

将XmlText 节点都转换成“正常”形式

PrependChild 

将指定的节点添加到该节点的子节点列表的开头

ReadNode

根据 XmlReader 中的信息创建一个 XmlNode 对象。读取器必须定位在节点或属性上

RemoveAll 

移除当前节点的所有子节点和/或属性

RemoveChild 

移除指定的子节点

ReplaceChild 

用新节点替换旧节点

Save

将 XML 文档保存到指定的位置

SelectNodes 

选择匹配XPath 表达式的节点列表

SelectSingleNode 

选择匹配 XPath 表达式的第一个 XmlNode

Supports 

测试 DOM 实现是否实现特定的功能

Validate

验证 XmlDocument 是不是 Schemas 属性中包含的 XML 架构定义语言 (XSD) 架构。

WriteContentTo

将 XmlDocument 节点的所有子级保存到指定的 XmlWriter 中

WriteTo

将 XmlDocument 节点保存到指定的 XmlWriter

  下面对常用的方法进行介绍。

  (1)Load方法

  该方法可以从一个字符串指定的XML文件或是一个流对象、一个TextReader对象、一个XmlReader对象导入XML数据。

  (2)LoadXml方法

  该方法完成从一个特定的XML文件导入XML数据的功能。默认情况下,LoadXml 方法既不保留空白,也不保留有意义的空白。此方法不执行 DTD 或架构验证。

  (3)Save方法

  该方法将XML数据保存到一个XML文件或是一个流对象、一个TextReader对象、一个XmlReader对象导入XML数据。

  3.XmlDocument类的事件

    XmlDocument类的事件及说明如下表所示。

                       表   XmlDocument类的事件及说明

事件

说明

NodeChanged

当属于该文档的节点的 Value已被更改时发生

NodeChanging

当属于该文档的节点的 Value 将被更改时发生

NodeInserted

当属于该文档的节点已被插入另一个节点时发生

NodeInserting

当属于该文档的节点将被插入另一个节点时发生

NodeRemoved

当属于该文档的节点已被从其父级移除时发生

NodeRemoving

当属于该文档的节点将被从文档中移除时发生

http://kb.cnblogs.com/page/42226/ 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/NCTU_to_prove_safety/article/details/72883263

智能推荐

CentOS7离线安装mysql5.7.34(配置远程登录)_mysql-5.7.34-1.el7.x86_64.rpm-bundle.tar-程序员宅基地

文章浏览阅读551次。下载压缩包:https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.34-1.el7.x86_64.rpm-bundle.tar解压压缩包并依次安装解压tar -xvf mysql-5.7.34-1.el7.x86_64.rpm-bundle.tar 依次安装rpm -ivh mysql-community-common-5.7.34-1.el7.x86_64.rpmrpm -ivh mysql-c._mysql-5.7.34-1.el7.x86_64.rpm-bundle.tar

使用Python实现自动发送微信消息源代码_微信发送消息的源码-程序员宅基地

文章浏览阅读613次,点赞11次,收藏10次。这是我基于python的自动化库`uiautomation`库实现使用PC版微信向指定微信好友发送文本和文件消息的源代码,可参考使用。_微信发送消息的源码

自然语言处理NLP 中文分词原理和工具总结_nlp 语音控制分词-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏13次。中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块。不同于英文的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词,分词效果将直接影响词性、句法树等模块的效果。当然分词只是一个工具,场景不同,要求也不同。在人机自然语言交互中,成熟的中文分词算法能够达到更好的自然语言处理效果,帮助计算机理解复杂的中文语言。竹间智能在构建中文自然语言对话系统时,结合..._nlp 语音控制分词

使用 Java 连接阿里云消息队列(Aliyun MQ_java对接阿里云mqtt-程序员宅基地

文章浏览阅读275次,点赞2次,收藏2次。在你的 Java 代码中,你需要初始化 Aliyun MQ 客户端,并配置相关的参数,例如 Endpoint、AccessKey、SecretKey 等。通过以上步骤,你可以使用 Java 连接阿里云消息队列(Aliyun MQ),并进行消息的发送和接收。这使得你能够在 Java 应用程序中利用阿里云 MQ 强大的消息传递能力。首先,你需要在你的 Java 项目中添加阿里云 MQ 的 Java SDK 依赖。如果你有其他问题或需要更多帮助,请随时联系我。另外,你还可以编写消费者来接收消息。_java对接阿里云mqtt

Ubuntu 22.04下Java环境的搭建(含多版本一键快速切换)_ubantu22.04安装并配置java11环境-程序员宅基地

文章浏览阅读737次,点赞20次,收藏29次。Java多版本环境搭建,版本一键切换_ubantu22.04安装并配置java11环境

app逆向-必备知识-程序员宅基地

文章浏览阅读828次,点赞9次,收藏9次。jeb_wincon 图像界面版,下载地址 :https://tool.kanxue.com/index-detail-182.htm。apktool 命令行执行,下载地址:https://github.com/iBotPeaches/Apktool。下载地址:https://www.oracle.com/java/technologies/downloads/jadx 图像界面版,下载地址:https://github.com/skylot/jadx。安装java:反编译工具依赖java环境。_app逆向

随便推点

Linux文件系统管理-/etc/fstab文件出错的修复_mount: /etc/fstab: parse error at line 13 -- ignor-程序员宅基地

文章浏览阅读1k次。由于/etc/fstab文件的错误,你需要拿到你的本机进行操作处理办法:输入密码,进入,然后修改/etc/fstab文件;按CTRL+D键强制重启,大概率还会出现这个错误。进入页面修改文件:这是由于,你的/etc/fstab文件出错,导致整个分区是挂载方式是只读模式,无法修改解决办法[root@localhost disk1]# mount -o remount,rw /..._mount: /etc/fstab: parse error at line 13 -- ignored

Docker --harbor --registry 私有仓库 部署与管理_docker registry 配置-程序员宅基地

文章浏览阅读658次。什么是HarborHarbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。Harbor 的每个组件都是以 Docker 容_docker registry 配置

Home Assistant Supervised安装指北(树莓派+Debian12+HASS Supervised+HACS极速版)-程序员宅基地

文章浏览阅读1.8k次,点赞21次,收藏18次。个人安装Home Assistant Supervised心得,记录下来供参考_hacs极速版

51单片机使用8×8点阵显示心形以及各种其他图案教程_单片机控制led点阵显示器显示爱心图案-程序员宅基地

文章浏览阅读4.8k次,点赞36次,收藏30次。51单片机8X8点阵显示心形,滚动字符详细教程_单片机控制led点阵显示器显示爱心图案

搭建高可用MinIO集群_minio高可用集群-程序员宅基地

文章浏览阅读192次。Error: Drive `http://192.168.2.6:9000/export2` is part of root drive, will not be used (*errors.errorString),如果出现上述问题,则需要添加一个新的硬盘。把数据挂载到新硬盘中。使用192.168.2.4:9000/去访问,Minio三节点集群宕机一个节点时可以正常使用 宕机两个节点时 无法使用。在第一台服务器192.168.2.4下运行。_minio高可用集群

jenkins安装docker插件(docker build step)安装配置_docker compose build step-程序员宅基地

文章浏览阅读6.6k次。1.点击 jenkins 系统管理--&gt;插件管理 搜索 docker build step 选中并安装 docker build step插件2.点击 jenkins 系统管理--&gt;系统设置 找到 Docker Builer配置项 3.点击save 我们就可以利用Docker build step插件自动化管理Docker了..._docker compose build step

推荐文章

热门文章

相关标签