通过linq从XML获得价值
所以我根本不愿意发布它,因为已经有无限的文档。它已经2年了,我碰到了LINQ,现在它开始挖掘我。经过3个小时的连续尝试和失败,我决定做我不愿意做的事情。发布到SO。通过linq从XML获得价值
我有这样的XML
<TopMost xmlns="http://abc.com/">
<Mine>MyName</Mine>
<Hello>
<File>SIMPLE</File>
<Book>20</Book>
<Copy>0</Copy>
</Hello>
</TopMost>
我只是想获得的 “文件” 的价值观, “尚书”, “复制”。并希望将其与单元测试中的某些内容进行比较。
我达到了这个高达:
string result = string.Empty;
const string path = @"C:\Library.xml";
XDocument xdoc = XDocument.Load(path);
var lv1s = from paper in xdoc.Descendants("Hello")
select new
{
fileP = paper.Element("File").Value,
bookP = paper.Element("Book").Value,
copyP = paper.Element("Copy").Value,
};
result += lv1s.fileP + lv1s.bookP + lv1s.copyP; // Error
MessageBox.Show(result);
错误:序列不包含任何元素
我知道必须有周围一个简单的方法,我从它很远。我有很多这样的代码片段,我尝试过并且失败了。
编辑
var lv1s = from paper in xdoc.Descendants(ns + "Hello")
select new
{
fileP = paper.Element(ns + "File").Value,
bookP = paper.Element(ns + "Book").Value,
copyP = paper.Element(ns + "Copy").Value,
};
我收到编译错误。
Error: The Name ns doex not exist in current context.
你需要指定namespcae:
XNamespace ns = "http://abc.com/"; // or: doc.Root.GetDefaultNamespace()
var lv1s = from paper in xdoc.Descendants(ns + "Hello")
select new
{
fileP = paper.Element(ns +"File").Value,
bookP = paper.Element(ns +"Book").Value,
copyP = paper.Element(ns +"Copy").Value,
};
不要试图使用string ns
或var ns
。
'ns'意味着''ns“'.....我的VS 2010无法解析'ns' – Sandy 2012-02-16 10:50:32
@rapsalands:它是'XNamespace',没有大写* S * 。 – 2012-02-16 10:52:09
发布不起作用的代码(添加到问题的结尾)。 – 2012-02-16 10:56:59
我假设发票==纸或反之亦然? – 2012-02-16 10:50:16
它的纸.......对不起 – Sandy 2012-02-16 10:52:51