验证innerXml,outerXml,innerText的不同

简介:

昨天看到关于xml的有关操作,在读的过程中,由于是初学者有不明白的地方就查资料,发现自己多innerXml,outerXml,innerXml的理解很不清楚,自己就在原有代码的上进行了部分修改(这不算侵权吧)。首先建立的xml的结构是这样子的,并命名为U-Shop:

< Teams >
  
< Member team = " U-Shop "  Description = " U-Shop团队 " >
    
< name > 灵动生活 </ name >
    
< position > planning </ position >
  
</ Member >
  
< Member team = " U-Shop "  Description = " U-Shop团队 " >
    
< name > 蓝蓝海天 </ name >
    
< position > support </ position >
  
</ Member >
  
< Member team = " U-Shop "  Description = " U-Shop团队 " >
    
< name > 神舟龙 </ name >
    
< position > lean </ position >
  
</ Member >
</ Teams >

确定路径:

string  myXmlFilePath  =   " E:\\U-Shop.xml " ;

依照此模板我们有c#代码进行建立,方法代码如下:

// 生成xml 结构
         private   static   void  GenerateXMLFIL( string  XMLfilePath)
        {
            
try
            {
                
// 实例化xml文档
                XmlDocument myXmlDoc  =   new  XmlDocument();
                
// 实例化一个根节点
                XmlElement rootElement  =  myXmlDoc.CreateElement( " Teams " );
                
// 把根节点添加到xml文档中
                myXmlDoc.AppendChild(rootElement);
                
// 创建一个一级节点
                XmlElement fistLevelElement1  =  myXmlDoc.CreateElement( " Member " );
                
// 设置属性
                fistLevelElement1.SetAttribute( " team " " U-Shop " );
                fistLevelElement1.SetAttribute(
" Description " " U-Shop团队 " );
                
// 将一级节点添加到根节点
                rootElement.AppendChild(fistLevelElement1);
                
// 创建二级节点
                XmlElement secondLevelElement11  =  myXmlDoc.CreateElement( " name " );
                
// 设置二级节点的串联值
                secondLevelElement11.InnerText  =   " 灵动生活 " ;
                
// 把二级节点添加到一级几点
                fistLevelElement1.AppendChild(secondLevelElement11);

                XmlElement threeLevelElement12 
=  myXmlDoc.CreateElement( " position " );
                threeLevelElement12.InnerText 
=   " planning " ;
                fistLevelElement1.AppendChild(threeLevelElement12);

                XmlElement secondLevelElement2 
=  myXmlDoc.CreateElement( " Member " );
                secondLevelElement2.SetAttribute(
" team " " U-Shop " );
                secondLevelElement2.SetAttribute(
" Description " " U-Shop团队 " );
                
// 添加到根节点
                rootElement.AppendChild(secondLevelElement2);

                XmlElement secondLevelElement21 
=  myXmlDoc.CreateElement( " name " );
                secondLevelElement21.InnerText 
=   " 蓝蓝海天 " ;
                secondLevelElement2.AppendChild(secondLevelElement21);
                XmlElement threeLevelElement22 
=  myXmlDoc.CreateElement( " position " );
                threeLevelElement22.InnerText 
=   " support " ;
                secondLevelElement2.AppendChild(threeLevelElement22);

                XmlElement secondLevelElement3 
=  myXmlDoc.CreateElement( " Member " );
                secondLevelElement3.SetAttribute(
" team " " U-Shop " );
                secondLevelElement3.SetAttribute(
" Description " " U-Shop团队 " );
                
// 添加到根节点
                rootElement.AppendChild(secondLevelElement3);

                XmlElement secondLevelElement31 
=  myXmlDoc.CreateElement( " name " );
                secondLevelElement31.InnerText 
=   " 神舟龙 " ;
                secondLevelElement3.AppendChild(secondLevelElement31);
                XmlElement threeLevelElement32 
=  myXmlDoc.CreateElement( " position " );
                threeLevelElement32.InnerText 
=   " lean " ;
                secondLevelElement3.AppendChild(threeLevelElement32);
                
// 保存,重要
                myXmlDoc.Save(XMLfilePath);
            }
            
catch  (Exception ex)
            {

                Console.WriteLine(ex.ToString());
            }

        }

下面的方法就是获取已经创建好的xml文件中信息,方法代码如下:

 

         // 获取xml信息
         private   static   void  GetXMLInformation( string  XMLfilePath)
        {
            
// 实例化一个xml文档
            XmlDocument myXmlDoc  =   new  XmlDocument();
            
// 加载xml文档
            myXmlDoc.Load(XMLfilePath);
            
// 获得第一个为Computers的根节点
            XmlNode rootNode  =  myXmlDoc.SelectSingleNode( " Teams " );
            
// 获取根节点中串联值
             string   innertext  =  rootNode.InnerText.ToString();
           
            
// 获取根节点虽有子节点结构
             string   innerXmlInfo  =  rootNode.InnerXml.ToString();
            
// 获取根节点在内的整个xml的结构
             string   outXmlInfo  =  rootNode.OuterXml.ToString();
            
            
// 获取根节点的所有自己点

            
//  }

            XmlNodeList firstLevelNodeList 
=  rootNode.ChildNodes;
            
// 遍历所有子节点
             foreach  (XmlNode node  in  firstLevelNodeList)
            {
                
string  inner  =  node.InnerXml;
                
string  outx  =  node.OuterXml;
                
// 获取所有子节点的属性
                XmlAttributeCollection attributeCol  =  node.Attributes;
                
// 遍历自己点属性
                 foreach  (XmlAttribute attri  in  attributeCol)
                {
                    
// 获取每个节点属性的key,value值
                     string  name  =  attri.Name;
                    
string  value  =  attri.Value;
                    Console.WriteLine(
" {0}={1} " , name, value);
                }
                
// 判断子节点是否还有子节点
                 if  (node.HasChildNodes)
                {
// 如果有子节点则执行
                    
// 获取子节点中的第一个孩子
                    XmlNode secondeLevelNode1  =  node.FirstChild;
                    
// 得到第一个孩子的名称
                     string  name  =  secondeLevelNode1.Name;
                    
string  innetext  =  secondeLevelNode1.InnerText.ToString();
                    
string  outxml  =  secondeLevelNode1.OuterXml.ToString();
                    
// 获得第一个孩子的串联值
                     string  innerxml  =  secondeLevelNode1.InnerXml.ToString();
                    

                    Console.WriteLine( " {0}={1} " , name, innerxml);

                    XmlNode secondLevelNode2 
=  node.ChildNodes[ 1 ];
                    name 
=  secondLevelNode2.Name;
                    innerxml 
=  secondLevelNode2.InnerXml;
                    Console.WriteLine(
" {0}={1} " , name, innerxml);

                    

                }

            }
        }

我们很容易获得上边代码中红色字体的值,即innertext=“灵动生活planning蓝蓝海天support神舟龙lean:“理解:根节点以下所有节点的值,innerXmlInfo =“

< Member team = " U-Shop "  Description = " U-Shop团队 " >
    
< name > 灵动生活 </ name >
    
< position > planning </ position >
  
</ Member >
  
< Member team = " U-Shop "  Description = " U-Shop团队 " >
    
< name > 蓝蓝海天 </ name >
    
< position > support </ position >
  
</ Member >
  
< Member team = " U-Shop "  Description = " U-Shop团队 " >
    
< name > 神舟龙 </ name >
    
< position > lean </ position >
  
</ Member >

理解:除根节点标签后,根节点包含的xml结构”, outXmlInfo   =”

< Teams >
  
< Member team = " U-Shop "  Description = " U-Shop团队 " >
    
< name > 灵动生活 </ name >
    
< position > planning </ position >
  
</ Member >
  
< Member team = " U-Shop "  Description = " U-Shop团队 " >
    
< name > 蓝蓝海天 </ name >
    
< position > support </ position >
  
</ Member >
  
< Member team = " U-Shop "  Description = " U-Shop团队 " >
    
< name > 神舟龙 </ name >
    
< position > lean </ position >
  
</ Member >
</ Teams >

理解:包含根节点标签在内的xml结构“

  

innertext :可以把这个单词分开进行理解,分开就是inner和text,inner就是里面的意思,这里我们可以理解为不包含本节点,即innertext所在节 点的子节点,text就是文本的意思,所以innertext不会出现标签,整体理解就是innertext所在节点所包含的子节点的值;

  innerxml:同样我们也可以把这个单词拆分进行理解,分开就是inner和xml,inner就是里面的意思,这里我们可以理解为不包含本节点,即innerxml所在节点的子节点,xml 这里可以认为是我们所写的标签,当然也包括它的属性值,所以这里理解就是innerxml所在节点所包含的子节点的标签结构;

 outerxml:同样我们也可以把这个单词拆分进行理解,分开就是outer和xml,out就是外面的意思,这里我们可以理解为包含本节点,即outerxml所在节点的子节点,xml 这里可以认为是我们所写的标签,当然也包括它的属性值,所以这里理解就是outerxml所在节点以及所包含的子节点的标签结构、属性、值(包含所在节点);


本文转自shenzhoulong  51CTO博客,原文链接:http://blog.51cto.com/shenzhoulong/486880,如需转载请自行联系原作者

相关文章
|
uml C++
VS工具使用——代码生成函数关系图
小引: 在上篇文章《VS工具使用——代码图》中,我向大家介绍了我对工具“代码图”的发现和认识。真是感觉当自己的眼睛不再被蒙蔽的时候,会发现整个世界的美好。所以,这次要向大家介绍我对VS中的另一个容易被忽视的工具—— 自动生成代码关系依赖图的理解。
1039 0
|
存储 人工智能 算法
寻路算法:找到NPC最好的行走路径
寻路就是一个看似简单问题的解:给定点A 和B,AI 该怎么智能地在游戏世界中行走?这个问题的复杂来自于实际上A 和B 之间存在大量的路径可走,但只有一条是最佳的。只是找到一条两点之间的有效路径是不够的。理想的寻路算法需要查找所有可能的情况,然后比较出最好的路径。
5843 0
|
C#
C# 泛型 无法将类型xx隐式转换为“T”
原文:C# 泛型 无法将类型xx隐式转换为“T” 直接奖泛型转为T是不能转换的 要先转Object 例:  public static T GetValue(string inValue) { if (typeof(T) == typeof(B...
3035 0
|
17小时前
|
云安全 人工智能 自然语言处理
|
5天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
309 116
|
7天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
539 50
Meta SAM3开源:让图像分割,听懂你的话
|
20天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~