我有一个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文档。
答案 0 :(得分: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文件中的命名空间是默认命名空间,但您仍需要将其包含在查询中。
答案 1 :(得分: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();