Parsing a XDocument

本文关键字:XDocument Parsing | 更新日期: 2023-09-27 18:04:42

我有以下XDocument:

<ExtensionInfo>
  <ObjectExtension />
  <AttributeExtension>
    <Attribute Name="PV" ExtensionType="inputoutputextension" InheritedFromTagName="$CT_STQ_V2" />
    <Attribute Name="PV" ExtensionType="logdatachangeeventextension" InheritedFromTagName="$CT_STQ_V2" />
    <Attribute Name="STS" ExtensionType="inputoutputextension" InheritedFromTagName="$CT_STQ_V2" />
    <Attribute Name="STS" ExtensionType="booleanextension" InheritedFromTagName="$CT_STQ_V2" />
    <Attribute Name="STS" ExtensionType="alarmextension" InheritedFromTagName="$CT_STQ_V2" />
    <Attribute Name="STS" ExtensionType="logdatachangeeventextension" InheritedFromTagName="$CT_STQ_V2" />
  </AttributeExtension>
</ExtensionInfo>

我试图返回$CT_STQ_V2当且仅当属性名称="STS"和ExtensionType="alarmextension"

如何使用XDocument &LINQ查询得到我所需要的。我需要解析数千个XML文件,因此需要快速的性能。任何建议都会有帮助的。

谢谢。

Parsing a XDocument

您可以通过简单的LinqXml语句实现这一点,我的首选是处理大型Xml

  XDocument doc = XDocument.Load(filename);
  var element = doc
      .Descendants("AttributeExtension")  // flatten the structure and look for extensions.
      .Elements("Attribute")              // get all attribute elements 
      .FirstOrDefault(x=>(string)x.Attribute("Name") == "STS" && (string)x.Attribute("ExtensionType") == "alarmextension");
  if(element!= null)
  {
      // return attribute value. 
      return (string)element.Attribute("InheritedFromTagName");
  }

检查Demo