zoukankan      html  css  js  c++  java
  • Xml解析之排除注释

    总结:

    1、Xml中的注释也被当作节点元素;

    示例XMLFile1.xml:

    <?xml version="1.0" encoding="utf-8" ?>
    <News>
      <!--{标题注释}-->
      <NewsTitle>{标题1}</NewsTitle>
      <NewsList>
        <!--{标题列表注释}-->
        <NewsDetailTitle>{详细标题1}</NewsDetailTitle>
        <NewsDetailName>{详细名称}</NewsDetailName>
      </NewsList>
    
    </News>

    C#解析代码:

     private void button1_Click(object sender, EventArgs e)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load("XMLFile1.xml");
                // 根节点
                XmlNode node = doc.DocumentElement; 
                // 遍历根节点的子节点
                foreach (XmlNode childNode in node.ChildNodes)
                {
                    // 【注意1:把根节点中的注释当成子节点】
    
                    //if (childNode.NodeType != XmlNodeType.Comment) // 判断不等于注释时
                    //{
                        textBox1.Text += childNode.InnerText;
                    //}
                  
                    // 遍历根节点的孙节点
                   foreach (XmlNode item in childNode.ChildNodes)
                   {
                       // 【注意2:把根节点中的子节点的注释当成孙节点】
                       textBox2.Text += item.InnerText;
                   }
    
                }
            }

    效果图:

    2、如果不要注释这个节点元素,可以根据XmlNodeType这个枚举类型来判断。

     // 摘要:
        //     指定节点的类型。
        public enum XmlNodeType
        {
            // 摘要:
            //     如果未调用 Read 方法,则由 System.Xml.XmlReader 返回。
            None = 0,
            //
            // 摘要:
            //     元素(例如,<item>)。
            Element = 1,
            //
            // 摘要:
            //     特性(例如,id='123')。
            Attribute = 2,
            //
            // 摘要:
            //     节点的文本内容。
            Text = 3,
            //
            // 摘要:
            //     CDATA 节(例如,<![CDATA[my escaped text]]>)。
            CDATA = 4,
            //
            // 摘要:
            //     实体引用(例如,&num;)。
            EntityReference = 5,
            //
            // 摘要:
            //     实体声明(例如,<!ENTITY...>)。
            Entity = 6,
            //
            // 摘要:
            //     处理指令(例如,<?pi test?>)。
            ProcessingInstruction = 7,
            //
            // 摘要:
            //     注释(例如,<!-- my comment -->)。
            Comment = 8,
            //
            // 摘要:
            //     作为文档树的根的文档对象提供对整个 XML 文档的访问。
            Document = 9,
            //
            // 摘要:
            //     由以下标记指示的文档类型声明(例如,<!DOCTYPE...>)。
            DocumentType = 10,
            //
            // 摘要:
            //     文档片段。
            DocumentFragment = 11,
            //
            // 摘要:
            //     文档类型声明中的表示法(例如,<!NOTATION...>)。
            Notation = 12,
            //
            // 摘要:
            //     标记间的空白。
            Whitespace = 13,
            //
            // 摘要:
            //     混合内容模型中标记间的空白或 xml:space="preserve" 范围内的空白。
            SignificantWhitespace = 14,
            //
            // 摘要:
            //     末尾元素标记(例如,</item>)。
            EndElement = 15,
            //
            // 摘要:
            //     由于调用 System.Xml.XmlReader.ResolveEntity() 而使 XmlReader 到达实体替换的末尾时返回。
            EndEntity = 16,
            //
            // 摘要:
            //     XML 声明(例如,<?xml version='1.0'?>)。
            XmlDeclaration = 17,
        }

    也就是如下代码:

    private void button1_Click(object sender, EventArgs e)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load("XMLFile1.xml");
                // 根节点
                XmlNode node = doc.DocumentElement;
                // 遍历根节点的子节点
                foreach (XmlNode childNode in node.ChildNodes)
                {
                    // 【注意1:把根节点中的注释当成子节点】
    
                    if (childNode.NodeType != XmlNodeType.Comment) // 判断不等于注释时
                    {
                        textBox1.Text += childNode.InnerText;
                    }
    
                    // 遍历根节点的孙节点
                    foreach (XmlNode item in childNode.ChildNodes)
                    {
                        // 【注意2:把根节点中的子节点的注释当成孙节点】
                        if (item.NodeType != XmlNodeType.Comment) // 判断不等于注释时
                        {
                            textBox2.Text += item.InnerText;
                        }
                    }
    
                }
            }

    效果图如下:

  • 相关阅读:
    人工智能背后的故事
    idea 开发插件。
    安卓工作室 Android studio 或 Intellij IDEA 美化 修改 汉化 酷炫 装逼 Android studio or Intellij IDEA beautify modify Chinesization cool decoration
    安卓工作室 android studio文件和代码模板,以及汉化出错问题
    安卓工作室 android studio 汉化后,报错。 设置界面打不开。Can't find resource for bundle java.util.PropertyResourceBundle, key emmet.bem.class.name.element.separator.label
    android studio的汉化 教程 及解析
    安卓工作室Android Studio 快捷键
    安卓工作室 android studio 的 汉化 美化 定制 Android studio's Chinesization beautification customization
    VR开发 VR development
    Lakeshore 中文开发界面,示例项目,飞机大战 等 Lakeshore Chinese development interface, sample project, aircraft war, etc
  • 原文地址:https://www.cnblogs.com/xiaobudong/p/6719906.html
Copyright © 2011-2022 走看看