如何在使用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>
答案 0 :(得分: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
}
}
答案 1 :(得分:4)
读取xml时检查节点类型。如果它是XComment
那么你正在阅读评论。例如。在您的情况下,服务器元素的上一个节点将是注释:
foreach(var s in doc.Descendants("server"))
{
var comment = s.PreviousNode as XComment;
if (comment != null)
Console.WriteLine(comment.Value); // outputs "Dummy servers"
}
答案 2 :(得分:0)
您必须使用XmlReader.Create方法并读取它并在节点之间切换以指示它当前正在读取哪个节点 不要被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
......等等
第2部分 - 对于那些想要使用LINQ的人(不是真的有所作为)......
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
}
答案 3 :(得分:-2)
您可以使用此示例在列表&lt;&gt;!
中返回您的xmlusing (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();
}