检查 xml 节点是否有属性
Check if xml node has attribute
我有一个 XML 文件,它是从 windows 应用程序生成的,如下所示 "Repport.xml":
<ArrayOfAutoReportXML>
<AutoReportXML ReportName="Report1" ReportID="1" />
<AutoReportXML ReportName="Report2" ReportID="2" />
<AutoReportXML ReportName="Report3" ReportID="3" />
<AutoReportXML ReportName="Report4" ReportID="4" />
<AutoReportXML ReportName="Report5" ReportID="5" />
</ArrayOfAutoReportXML>
我正在尝试检查 ReportName 是否已经存在,我正在尝试使用以下代码来执行此操作:
using (FileStream fs = new FileStream("Repport.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
XDocument doc = XDocument.Load(fs);
string attrReportname = (string) doc.Elements("AutoReportXML")
.Where(ox => ox.Attribute("ReportName").Value.ToString() == ReportName)
.FirstOrDefault();
}
而attrReportName
是null
。
问题是 Elements
只会从当前上下文中找到直接子元素。 doc.Elements()
返回的唯一元素是 ArrayOfAutoReportXML
.
你需要的是Descendants
,遍历文档中的所有个元素。
检查是否存在基于该属性的报告:
var reportExists = doc
.Descendants("AutoReportXML")
.Attributes("ReportName")
.Any(x => x.Value == "Report1");
如果您需要使用多个属性进行检查:
var reportExists = doc
.Descendants("AutoReportXML")
.Any(x => (string)x.Attribute("ReportName") == "Report1" &&
(int)x.Attribute("ReportID") == 1);
有关工作演示,请参阅 this fiddle。
我有一个 XML 文件,它是从 windows 应用程序生成的,如下所示 "Repport.xml":
<ArrayOfAutoReportXML>
<AutoReportXML ReportName="Report1" ReportID="1" />
<AutoReportXML ReportName="Report2" ReportID="2" />
<AutoReportXML ReportName="Report3" ReportID="3" />
<AutoReportXML ReportName="Report4" ReportID="4" />
<AutoReportXML ReportName="Report5" ReportID="5" />
</ArrayOfAutoReportXML>
我正在尝试检查 ReportName 是否已经存在,我正在尝试使用以下代码来执行此操作:
using (FileStream fs = new FileStream("Repport.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
XDocument doc = XDocument.Load(fs);
string attrReportname = (string) doc.Elements("AutoReportXML")
.Where(ox => ox.Attribute("ReportName").Value.ToString() == ReportName)
.FirstOrDefault();
}
而attrReportName
是null
。
问题是 Elements
只会从当前上下文中找到直接子元素。 doc.Elements()
返回的唯一元素是 ArrayOfAutoReportXML
.
你需要的是Descendants
,遍历文档中的所有个元素。
检查是否存在基于该属性的报告:
var reportExists = doc
.Descendants("AutoReportXML")
.Attributes("ReportName")
.Any(x => x.Value == "Report1");
如果您需要使用多个属性进行检查:
var reportExists = doc
.Descendants("AutoReportXML")
.Any(x => (string)x.Attribute("ReportName") == "Report1" &&
(int)x.Attribute("ReportID") == 1);
有关工作演示,请参阅 this fiddle。