[英]Extracting attributes from XML using LINQ
我有以下XML文件(实际上是VS2010 dbproj文件)
<?xml version="1.0" enconding="utf-8"?>
<Project.....>
<propertyGroup>
....
</PropertyGroup>
<ItemGroup>
<Build Include = "Schema Objects\Schemas\dbo\Programmability\Stored Procedures\foo.sql>
</Build>
</ItemGroup>
</Project>
我想使用LINQ to XML来提取存储过程的所有Build元素。 我有以下代码,似乎不起作用:
var doc = XDocument.Load(filePath);
var elements = doc.Descendants("Build").Where( x => x.Attribute("Include").Value.Contains("Stored Procedure")).ToList();
提取属性值的正确方法是什么?
谢谢你的回复! 原来,在Project标记中指定了一个命名空间,但我省略了。 这就是为什么我得到0个结果的原因。
var doc = XElement.Parse(xml);
// or
var doc = XDocument.Load(path);
var q = from e in doc.Descendants("Build")
from a in e.Attributes("Include")
where a.Value.Contains("Stored Procedure")
select e;
var list = q.ToList();
PS这种方法不需要检查每个变量的null,例如:
var q = from e in doc.Descendants("Build")
where e != null
from a in e.Attributes("Include")
where a != null && a.Value != null && a.Value.Contains("Stored Procedure")
select e;
一旦你修复了XML(你错过了一个结束语,并且那里有不匹配的标签),它就可以了。 在LINQPad中测试过
string xml =
"<Project>"+
"<PropertyGroup>" +
"</PropertyGroup>" +
"<ItemGroup>" +
"<Build Include = \"Schema Objects\\Schemas\\dbo\\Programmability\\Stored Procedures\\foo.sql\">"+
"</Build>"+
"</ItemGroup>"+
"</Project>";
var doc = XDocument.Parse(xml);
var elements = doc.Descendants("Build").Where (x => x.Attribute("Include").Value.Contains("Stored Procedure")).ToList();
elements.Dump();
结果是:
<Build Include="Schema Objects\Schemas\dbo\Programmability\Stored Procedures\foo.sql"> </Build>
如果您只是想获取价值,请尝试以下操作:
var element2 = doc.Descendants("Build").Where (x => x.Attribute("Include").Value.Contains("Stored Procedure")).Select (x => x.Attribute("Include").Value);
element2.Dump();
编辑 - 这也有效:
var element3 = doc.Descendants("Build").Select(x=>x.Attribute("Include")).Where(y=>y.Value.Contains("Stored Procedure")).FirstOrDefault().Value;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.