總結:
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, // // 摘要: // 實體引用(例如,#)。 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; } } } }
效果圖如下: