C# 是否有方法检查XML文件中的特定节点是否包含注释,以及是否包含注释以读取注释?
我想读取特定节点的所有注释,并将它们放入C#中的列表中 我的代码是: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
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。它的工作非常好,正是我所寻找的!