0

我有以下 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 以字符串形式给我整个子节点。我需要选择特定国家/地区的所有书籍,以便我可以将它们全部更新以包含新的语言环境节点,例如:

<Config>
       <Book>
          <Name> Book Name #1 </Name>
          <Available In>
                   <Country>US</Country>
                   <Country>Canada</Country>
          </Available In>
          <LocaleIDs>
               <LocalID> 3066 </LocaleID>
          <LocaleIDs>
       </Book>
    </Config>

谢谢你的帮助!

4

1 回答 1

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 以使用有效的元素名称......

于 2013-04-23T17:59:16.467 回答