我有一个非常基本的XML文件,如下所示:
<allData>
<allDataDetails>
<quoteid>ABC123</quoteid>
<customername>John Smith</customername>
</allDataDetails>
<allDataDetails>
<quoteid>DEF456</quoteid>
<customername>Jane Doe</customername>
</allDataDetails>
</allData>
我的XSD指定必须至少存在1个allDataDetails元素。该文件已经过验证。
但是,当使用Linq查询XML时,我似乎无法识别或查询allData中的内部元素。相反,当我在调试器中查看时,Value属性是连接的所有数据。它看起来像这样:
ABC123John SmithDEF456Jane Doe
这是我的查询代码。 myRows总是为null,因为我似乎无法得到后代:
XDocument entityXml = XDocument.Parse(myDataString);
var myRows = from d in entityXml.Descendants("allDataDetails")
select new
{
quoteid = d.Element("quoteid").Value,
customername = d.Element("customername").Value
};
任何人都知道这里可能出现什么问题?
答案 0 :(得分:2)
我的印象是你在本地窗口中看到在错误的变量 - 你正在查看整个XDocument,它的.Value
属性确实会像所有节点值的串联字符串.....
但是你真的应该看{/ 1}}变量 - 如果你真的执行你发布的代码,你应该看到:
不是'你正在寻找/期待什么???
答案 1 :(得分:1)
我只是运行您的示例代码,修复了一些语法错误: 并且值得客户名称的逗号错误,请尝试下面的版本,它应该可以工作。
string myDataString = @"<allData>
<allDataDetails>
<quoteid>ABC123</quoteid>
<customername>John Smith</customername>
</allDataDetails>
<allDataDetails>
<quoteid>DEF456</quoteid>
<customername>Jane Doe</customername>
</allDataDetails>
</allData>";
XDocument entityXml = XDocument.Parse(myDataString);
var myRows = from d in entityXml.Descendants("allDataDetails")
select new
{
quoteid = d.Element("quoteid").Value
,customername = d.Element("customername").Value
};
foreach (var rw in myRows)
Console.WriteLine(rw.customername + "\t" + rw.quoteid);