Xml解析之排除註釋

總結:node

一、Xml中的註釋也被看成節點元素;spa

示例XMLFile1.xml:code

<?xml version="1.0" encoding="utf-8" ?>
<News>
  <!--{標題註釋}-->
  <NewsTitle>{標題1}</NewsTitle>
  <NewsList>
    <!--{標題列表註釋}-->
    <NewsDetailTitle>{詳細標題1}</NewsDetailTitle>
    <NewsDetailName>{詳細名稱}</NewsDetailName>
  </NewsList>

</News>

 

C#解析代碼:xml

 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;
               }

            }
        }

效果圖:對象

二、若是不要註釋這個節點元素,能夠根據XmlNodeType這個枚舉類型來判斷。blog

 // 摘要:
    //     指定節點的類型。
    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,
    }

也就是以下代碼:utf-8

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;
                    }
                }

            }
        }

 

效果圖以下:文檔

相關文章
相關標籤/搜索