C# 是否有方法检查XML文件中的特定节点是否包含注释,以及是否包含注释以读取注释?

C# 是否有方法检查XML文件中的特定节点是否包含注释,以及是否包含注释以读取注释?,c#,xml,list,comments,C#,Xml,List,Comments,我想读取特定节点的所有注释,并将它们放入C#中的列表中 我的代码是: List<string> keyList = new List<string>(); List<string> valueList= new List<string>(); var xmldoc = new XmlDocument(); xmldoc.Load("xmlfile.xml"); var result = xmldoc.SelectNodes(/manuel/ch

我想读取特定节点的所有注释,并将它们放入C#中的列表中

我的代码是:

List<string> keyList = new List<string>();
List<string> valueList= new List<string>();

var xmldoc = new XmlDocument();
xmldoc.Load("xmlfile.xml");

var result = xmldoc.SelectNodes(/manuel/chapter-ref/chapter/chapter-ref/chapter/block/procedure/step/action/table/tgroup/tbody/row/entry/p/formfield/@field_id);

foreach(XmlNode item in result){
keyList.Add(item.Value)
}
List keyList=new List();
列表值列表=新列表();
var xmldoc=新的XmlDocument();
Load(“xmlfile.xml”);
var result=xmldoc.SelectNodes(/manuel/chapter ref/chapter/chapter ref/chapter/block/procedure/step/action/table/tgroup/tbody/row/entry/p/formfield/@field\u id);
foreach(结果中的XmlNode项){
keyList.Add(item.Value)
}

这样我就可以从formfields中获取每个字段的id,并将它们放入keyList中。有些表单字段包含注释,有些则不包含。我想将这些注释添加到列表valueList中,如果formfield不包含注释,我想将“无值”添加到列表中。有办法吗?

使用
foo/bar/comment()

因为您已经在表单字段中调用了
SelectNodes
,所以我建议更改XPath并添加一个if语句来检查注释节点

List<string> keyList = new List<string>();
List<string> valueList= new List<string>();

var xmldoc = new XmlDocument();
xmldoc.Load("xmlfile.xml");

// Removed '/@field_id'
var result = xmldoc.SelectNodes("/manuel/chapter-ref/chapter/chapter-ref/chapter/block/procedure/step/action/table/tgroup/tbody/row/entry/p/formfield");

foreach(XmlElement item in result)
{
    var nd = item.SelectSingleNode("comment()");
    if (nd != null) valueList.Add(nd.InnerText);
    else valueList.Add("no val");

    keyList.Add(item.GetAttribute("field_id")); // Changed to GetAttribute
}
List keyList=new List();
列表值列表=新列表();
var xmldoc=新的XmlDocument();
Load(“xmlfile.xml”);
//已删除“/@field\u id”
var result=xmldoc.SelectNodes(“/manuel/chapter ref/chapter/chapter ref/chapter/block/procedure/step/action/table/tgroup/tbody/row/entry/p/formfield”);
foreach(结果中的XmlElement项)
{
var nd=item.SelectSingleNode(“comment()”);
如果(nd!=null)valueList.Add(nd.InnerText);
其他价值清单。添加(“无价值”);
keyList.Add(item.GetAttribute(“field_id”);//更改为GetAttribute
}
使用xml语言:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication159
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            var comments = doc.DescendantNodes().Where(x => x.GetType() == typeof(XComment)).ToList();            
         }
    }
}

你能分享你的
XML
文件内容吗?XML文件是一个生成的文件,非常大。6600行。formfield看起来像这样:X,XXX不GetAttribute只与XmlElement一起工作吗?我收到一个错误,它说XmlNode不包含“GetAttribute”的定义。是的,但您的选择肯定是XmlElements,只需将foreach中的XmlNode类型更改为XmlElement。谢谢您!没有看到您将其更改为XmlElement。它的工作非常好,正是我所寻找的!