2011-07-28 35 views
1

可能重複:
Parse XML Elements with LINQ的LINQ to XML Select語句 - 沒有結果

我有一個看起來像這樣的XML文檔:

<?xml version="1.0" encoding="utf-8" ?> 
<TestDataset xmlns="http://tempuri.org/TestDataset.xsd"> 
    <TaxRate> 
    <Code>GST</Code> 
    <Rate>0.05</Rate> 
    <LastModified>2010-03-31T17:03:24.063-04:00</LastModified> 
    <Deleted>0</Deleted> 
    <AbbreviationEN>GST</AbbreviationEN> 
    <AbbreviationFR>GST</AbbreviationFR> 
    <GLSubCode>GST</GLSubCode> 
    </TaxRate> 
    <TaxRate> 
    <Code>PST</Code> 
    <Rate>0.08</Rate> 
    <LastModified>2010-03-31T17:03:24.063-04:00</LastModified> 
    <Deleted>0</Deleted> 
    <AbbreviationEN>PST</AbbreviationEN> 
    <AbbreviationFR>PST</AbbreviationFR> 
    <GLSubCode>PST</GLSubCode> 
    </TaxRate> 
</TestDataset> 

,我試圖使用以下查詢選擇它的內容:

XDocument data = LoadTestData("TaxRate.xml"); 
var taxdata = (from x in data.Elements("TaxRate") 
       select new 
       { 
        Code = x.Element("Code").Value, 
        Rate = x.Element("Rate").Value, 
        AbbreviationEN = x.Element("AbbreviationEN").Value, 
        AbbreviationFR = x.Element("AbbreviationFR").Value, 
        GLSubCode = x.Element("GLSubCode").Value 
       }).ToList(); 

但是我一直沒有收到任何結果,LoadTestData正在加載XML文檔。

回答

4

你忘了包括命名空間:

XNamespace ns = "http://tempuri.org/TestDataset.xsd"; 
XDocument data = LoadTestData("TaxRate.xml"); 
var taxdata = (from x in data.Descendants(ns + "TaxRate") 
       select new 
       { 
        Code = x.Element(ns + "Code").Value, 
        Rate = x.Element(ns + "Rate").Value, 
        AbbreviationEN = x.Element(ns + "AbbreviationEN").Value, 
        AbbreviationFR = x.Element(ns + "AbbreviationFR").Value, 
        GLSubCode = x.Element(ns + "GLSubCode").Value 
       }).ToList(); 

雖然在XML文件的命名空間是默認的命名空間,你仍然需要包括它在你的查詢中。

3

你必須尊重的命名空間:

XNamespace ns = "http://tempuri.org/TestDataset.xsd"; 
var taxdata = (from x in data.Elements(ns+"TaxRate") 
      select new 
      { 
       Code = x.Element(ns+"Code").Value, 
       Rate = x.Element(ns+"Rate").Value, 
       AbbreviationEN = x.Element(ns+"AbbreviationEN").Value, 
       AbbreviationFR = x.Element(ns+"AbbreviationFR").Value, 
       GLSubCode = x.Element(ns+"GLSubCode").Value 
      }).ToList();