簡體   English   中英

檢查xml節點是否具有屬性

[英]Check if xml node has attribute

我有一個從Windows應用程序生成的XML文件,例如“ 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();
}

並且attrReportNamenull

問題在於, 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);

請參閱此小提琴以獲得有效的演示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM