2013-04-23 68 views
0

我有以下XML:選擇與LINQ一個XML節點,並修改

<Config> 
    <Book> 
     <Name> Book Name #1 </Name> 
     <Available In> 
       <Country>US</Country> 
       <Country>Canada</Country> 
     </Available In> 
    </Book> 
</Config> 

我需要找到其在特定國家提供圖書的所有實例,然後下面介紹一個節點「可用於「。我的選擇語句失敗,只要我添加where語句:

XElement xmlFile = XElement.Load(xmlFileLocation); 
var q = (from c in xmlFile.Elements(「Book」) 
      where c.Elements(Country).Value == "Canada" 
      select c; 

。價值不能得到解決,和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> 

感謝您的幫助!

回答

2

您正在嘗試使用Value來調用Elements,其返回序列的元素。這不起作用 - 這沒有任何意義。您想一次調用一個元素。

此外,你要尋找的Book,而忽略了Available In元素,它甚至不是一個有效的元素名稱直接兒......

我懷疑你想要的東西,如:

var query = xmlFile.Elements("Book") 
        .Where(x => x.Descendants("Country") 
           .Any(x => (string) x == "Canada")); 

換句話說,找到Book元素,其中任何後裔Country元素的文本值爲「加拿大」。

您仍然需要修復您的XML以使用有效的元素名稱,儘管...