c# - 查询 parent.attribute 等于 LINQ to XML 中的某个值

标签 c# .net-3.5 linq-to-xml

我有以下名为 testFix.fix 的 XML 文档

<WriteFixedWidth Type="extract">
  <Position Start="1" Length="15" Name="Field1" />
  <Position Start="16" Length="8" Name="Field2" />
  <Position Start="24" Length="10" Name="Field3" />
</WriteFixedWidth>

还有下面的代码

public void readXML()
{
    XDocument loaded = XDocument.Load(@"testSpec.xml");

    var q = from c in loaded.Descendants("WriteFixedWidth").Elements("Position")
            where c.Parent.Attribute("Type").ToString() == "Extract"
            select new
            {
                 Start = c.Attribute("Start").Value,
                 Length = c.Attribute("Length").Value,
                 Name = c.Attribute("Name").Value
            };

    foreach (var field in q)
        Console.WriteLine("Name is {0}, Start is {1}, Length is {2}", field.Name, field.Start, field.Length);
}

如果删除 where 子句,我将按预期获得此 XML 文档中的所有字段。但是,对于不同的操作,我会有不同的“类型”属性。如何过滤来自父节点的数据?最好将其视为一个查询而不是构建两个查询。

最佳答案

访问属性时,需要使用Value属性,而不是ToString()

var q = from c in loaded.Descendants("WriteFixedWidth").Elements("Position")
            where c.Parent.Attribute("Type").Value == "extract"
            select new
            {
                Start = c.Attribute("Start").Value,
                Length = c.Attribute("Length").Value,
                Name = c.Attribute("Name").Value
            };

(另请注意,“extract”在您的示例中为小写,但在您的查询中为大写)

关于c# - 查询 parent.attribute 等于 LINQ to XML 中的某个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696519/

相关文章:

c# - 划掉文字文本

c# - 改进 SortedDictionary 的访问时间

xml - 使用带有 foreach 循环的 LINQ to XML 创建 XML 文档

ASP.Net 按钮单击事件未触发

c# - 删除 XML 节点集合中的空/空白元素

c# - 我的 LINQ to XML 代码中的空引用异常

c# - 在用户控件内单击按钮更改 View

c# - 如何使用密码或 SSH 指纹进行 SFTP 身份验证 WinSCP C# .NET 程序集

c# - 如何阻止 git 在 checkout 时破坏编码

c# - 无论如何使 IList.Contains() 更像通配符包含?