【问题标题】:Parsing a XDocument解析 XDocument
【发布时间】:2016-08-30 03:53:13
【问题描述】:

我有以下 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 当且仅当 Attribute Name="STS" 和 ExtensionType="alarmextension"

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

谢谢。

【问题讨论】:

  • 到目前为止你有什么?
  • 查看this 博客并更新您的问题以展示您的努力。
  • var q1 = from elm in xd.Descendants("Attribute") where (string)elm.Attribute("Name") == myObjectReader["AttributeName"].ToString() where (string) elm.Attribute("ExtensionType") == "alarmextension" 选择榆树; foreach (var elm in q1) { 继承 = (string)elm.Attribute("InheritedFromTagName"); }

标签: c# linq linq-to-xml


【解决方案1】:

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

  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

【讨论】:

    猜你喜欢
    • 2013-07-28
    • 1970-01-01
    • 2018-07-24
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多