2013-12-09 96 views
2

如何在使用XDocument時讀取xml註釋?c#使用XDocument讀取XML註釋

XDocument doc = XDocument.Load("joker.xml"); 
foreach (XElement element in doc.Descendants("server")) 
      { 
//I use this to read server tag... 
} 



<?xml version="1.0" encoding="ISO-8859-1"?> 
<ho> 
    <!-- For X use only --> 
    <servers> 
     <server NAME="xx" ></server> 

    <!-- Dummy servers --> 
     <server NAME="xx" ></server> 
     <server NAME="xx" ></server> 
    </servers> 
</ho> 
+2

這將是很好看* joker.xml的內容* –

+0

的[在C#讀取XML註釋](可能的複製http://stackoverflow.com/questions/6277966/reading-xml-comments-in -c-sharp) – rae1

+0

不能重複,因爲我想在Xdocuemnt中執行它 –

回答

5

Node對象是整個DOM的主要數據類型。

節點可以是元素節點,屬性節點,文本節點,或任何其他的節點類型的在"Node types" chapter.

XML元素解釋是從(包括)元素的開始標籤至所有(包括)元素的結束標記。

 XDocument xdoc = XDocument.Load(""); 
     foreach (var node in xdoc.Descendants("servers").Nodes()) 
     { 

      if (node is XComment) 
      { 
       //THEN READ YOUR COMMENT 

      } 

     } 
+4

你不應該**總是**使用節點。但在這種情況下,你應該。 – Kevin

+0

你應該證明你爲什麼投票它是無禮的 –

+0

對不起,我會更新,但在這種情況下,這是最好的方法 –

0

你將不得不使用XmlReader.Create方法和閱讀並節點之間切換以指示哪個節點是當前讀數 不要被創建方法上當......它讀取XML文件問題而造成的XmlReader對象的實例:

http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.create(v=vs.110).aspx

XmlReader xmlRdr = XmlReader.Create("Joker.XML"); 
// Parse the file 
while (xmlRdr.Read()) 
{ 
    switch (xmlRdr.NodeType) 
    { 
     case XmlNodeType.Element: 
      // Current node is an Xml Element 
      break; 
     case XmlNodeType.Comment: 
      // This is a comment so do something with xmlRdr.value 

...等等

PART 2 - 爲那些誰想要使用LINQ(不在於它有差別真的)......

讀取XML時
XDocument xml = XDocument.Load("joker.xml"); 
var commentNodes = from n in xml.Descendants("server") 
       where n.NodeType == XmlNodeType.Comment 
       select n; 

foreach(XNode node in commentNodes) 
{ 
    // now you are iterating over the comments it has found 
} 
+1

不,這是不是與Xdocument的答案你有Linq的支持xml他想要一個解決方案,他的代碼不是一種新的方式去做 –

+0

當然,但它有什麼不同? LINQ的確讓它更容易閱讀。它不會改變功能。它的另一種表達方式:)。此外,原始問題還沒有在LINQ上顯示任何用法。 –

+0

特別要求使用XDocument的解決方案。 – Kevin

4

檢查節點類型。如果是XComment那麼你正在閱讀評論。例如。在你的情況下,服務器元素的前一個節點將發表評論:

foreach(var s in doc.Descendants("server")) 
{ 
    var comment = s.PreviousNode as XComment; 
    if (comment != null) 
     Console.WriteLine(comment.Value); // outputs "Dummy servers" 
} 
+0

no descendans將返回一個不同於節點的xelement –

+0

@JulieShannon看看OP代碼。他想爲服務器發表評論。服務器是元素。 –

+0

好吧,但這樣做,你正在過濾所有元素你明白節點和元素之間的區別? –

-2

你可以用這個例子返回你的xml在列表中<>!

using (XmlTextReader xmlReader = new XmlTextReader(your file.xml)) 
     { 
      XDocument xdoc = XDocument.Load(xmlReader); 
      var programs= from programItem in xdoc.Root.Elements() 
          select new yourclass { 
       Id = Convert.ToInt32(programItem.Attribute("Id").Value), 
       value1 = programItem.Attribute("value1").Value, 
       value2 = programItem.Attribute("value2").Value 
      }; 

      result = programs.ToList(); 
     } 
+2

這通常是關於閱讀與OP的問題沒有任何特定的XDocuments –