【问题标题】:Getting selective tag values using LINQ使用 LINQ 获取选择性标记值
【发布时间】:2013-02-20 06:50:30
【问题描述】:

我在编写 LINQ 查询以从 XML 获取某些节点时遇到问题,希望有人能提供帮助。 这是 XML:

<EmpFieldsMap>
<Field>
  <Name insert = "false">EmpNumber</Name>  
</Field>
<Field>
  <Name insert = "true">EmpName</Name>
</Field>
<Field>
  <Name insert = "true">EmpLocation</Name>
</Field>
<Field>
  <Name update = "false">EmpAddress1</Name>
</Field>
<Field>
  <Name update = "false">EmpAddress2</Name>
</Field>
<Field>
</EmpFieldsMap>

如您所见,一些Name 标记具有insert,而另一些则具有update 属性。

我需要获取没有insert 属性并将insert 作为true 的标签。 这意味着InsertCollection 应该有EmpNameEmpLocationEmpAddress1EmpAddress2

这段代码:

var titles = from nameTag in xml.Element("EmpFieldsMap").Elements("Field")
             let insert = nameTag.Attribute("insert") ?? new XAttribute("insert","true")
             where insert.Value == "true"
             select nameTag.Element("Name").Value;

给出所有五个Field 标记值,忽略Where 子句。

我错过了什么?

【问题讨论】:

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


    【解决方案1】:

    您应该知道,XAttribute 可以转换为 bool,并且将为数字 (0/1) 和文本 (true/false) 属性值返回正确的布尔值。

    我会试试这个:

    titles = from nameTag in xml.Element("EmpFieldsMap").Elements("Field")
             let insert = nameTag.Element("Name").Attribute("insert")
             where insert == null || (bool)insert
             select nameTag.Element("Name").Value;
    

    您正在尝试获取 Field 元素的插入属性,这一直都没有。您应该检查nameTag.Element("Name").Attribute("insert") 或在第一行获取Name 元素。

    【讨论】:

    • 这个给出了不能将类型'string'转换为'bool'。删除演员表或将其更改为字符串给 Operator '||'不能应用于“bool”和“string”类型的操作数
    • 好的,我发现了一个问题。您正在尝试获取 Field 元素的 insert 属性,这一直都不是。更新了我的答案。
    【解决方案2】:

    这样试试

    titles = (from nameTag in xml.Element("EmpFieldsMap").Elements("Field"))
             .Where ( el=> (el.Attribute("insert").Value.Equals("true") )  ||
                            (el.Attribute("update").Value.Equals("false") )
             Select(f => new 
                {
                    Text = nameTag.Element("Name").Value
                 });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多