0

我有这个 xml 文件

<config>
  <PersonMapping>
    <Field>
      <Name>Id</Name>
      <Position>0</Position>
    </Field>
    <Field>
      <Name>FirstName</Name>
      <Position>1</Position>
    </Field>
    <Field>
      <Name>LastName</Name>
      <Position>2</Position>
    </Field>
    <Field>
      <Name insert='false' update='false'>Address1</Name>
      <Position>3</Position>
    </Field>
    <Field>
      <Name insert='false' update='false'>Address2</Name>
      <Position>4</Position>
    </Field>
  </PersonMapping>
</config>

我必须根据此文件中的设置创建两个集合。根据用户的需要,某些“字段”标签可能有也可能没有“插入”和“更新”属性。

插入集合将包含所有具有 insert = 'true' 或不存在的标签 更新集合将包含所有具有 update = 'true' 或不存在的标签

对于没有其中任何一个的标签,它们默认为 true。

我为插入写了这个查询

propertiesToInsertFromXML = from nameTag in xml.Element("Config").Element("PersonMapping").Elements("Field")
                            let insert = nameTag.Element("Name").Attribute("insert")
                            let update = nameTag.Element("Name").Attribute("update")
                            where insert == null || (bool)insert  && update == null || (bool)update
                            select nameTag.Element("Name").Value;

这给出了名字,名字,姓氏

有人可以在这里帮助我吗?

问候。

4

2 回答 2

0

您可以尝试将where部分更改为

where (insert == null || Convert.ToBoolean(insert.Value))

编辑不知道是否<Name insert='fasle'需要测试或拼写错误。

于 2013-03-06T13:27:37.510 回答
0

将属性转换为可为空的布尔值。对于缺少的属性,您将获得空值。然后只需验证是否insert没有值(属性缺失)或它的值是否为true

var insertTags = from name in xml.Descendants("Name")
                 let insert = (bool?)name.Attribute("insert") 
                 where !insert.HasValue || insert.Value
                 select (string)name;

备注: insert变量有类型Nullable<bool>它不是XAttribute这里的类型。


与 XPath 相同:

var insertTags = xml.XPathSelectElements("//Name[@insert='true'or not(@insert)]")
                    .Select(n => (string)n);
于 2013-03-06T13:37:40.733 回答