我有这个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'或不存在的标记
对于没有任何一个标签的标签,默认情况下为真。
我为insert
写了这个查询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;
其中包含Name,FirstName,LastName
有人可以帮助我吗?
问候。
答案 0 :(得分:0)
您可以尝试将where
部分更改为
where (insert == null || Convert.ToBoolean(insert.Value))
EDIT
不知道是否需要<Name insert='fasle'
进行测试或拼写错误。
答案 1 :(得分: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);