2013-12-09 66 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 –