我有以下XML:
<Config>
<Book>
<Name> Book Name #1 </Name>
<Available In>
<Country>US</Country>
<Country>Canada</Country>
</Available In>
</Book>
</Config>
我需要找到特定国家/地区可用的Book的所有实例,然后在“Available In”下面引入一个节点。我添加where语句时,我的选择语句失败:
XElement xmlFile = XElement.Load(xmlFileLocation);
var q = (from c in xmlFile.Elements(“Book”)
where c.Elements(Country).Value == "Canada"
select c;
.Value无法解析,toString在stringform中给我整个子节点。我需要选择特定国家/地区的所有图书,以便我可以将它们全部更新为包含新的区域设置节点,例如:
<Config>
<Book>
<Name> Book Name #1 </Name>
<Available In>
<Country>US</Country>
<Country>Canada</Country>
</Available In>
<LocaleIDs>
<LocalID> 3066 </LocaleID>
<LocaleIDs>
</Book>
</Config>
感谢您的帮助!
答案 0 :(得分:2)
您尝试在调用Value
的结果上使用Elements
,该结果会返回元素的序列。那不行 - 它没有任何意义。你想一次在一个元素上调用它。
此外,您正在尝试查找Book
的直接子项,这会忽略Available In
元素,该元素甚至不是有效的元素名称...
我怀疑你想要这样的东西:
var query = xmlFile.Elements("Book")
.Where(x => x.Descendants("Country")
.Any(x => (string) x == "Canada"));
换句话说,查找Book
个元素,其中任何后代Country
元素的文本值为“Canada”。
您仍然需要修复XML以使用有效的元素名称...