我有一个看起来像这样的xml文件
<?xml version="1.0" encoding="utf-8"?>
<Content>
<Field Title="XYZ">
<Description>Numeric</Description>
<Comment>12345</Comment>
</Field>
<Field Title="ABC">
<Description>Alphabetic</Description>
<Comment>QWERTY</Comment>
</Field>
<Field Title="XYZ">
<Description>Alphabetic</Description>
<Comment>QWERTY</Comment>
</Field>
</Content>
我想提取<Description>
和<Comment>
的节点值
带有Title
Value='XYZ'
下
我尝试使用Linq to Xml这样的东西,但没有得到期待的结果
string Xmlpath = @"d:\Test.xml";
XDocument mappings = XDocument.Load(Xmlpath);
var Data = from elm in mappings.Descendants("Field")
where (string)elm.Attribute("Title") == "XYZ"
select elm;
有人能帮助我吗?
答案 0 :(得分:1)
这将为您提供一个包含您指定的所有元素的集合:
var result = XDocument.Load(XmlPath).Root
.Descendants("Field")
.Where(element => element.Attribute("Title") == "XYZ")
.Descendants()
.Where(element => element.Name == "Description" ||
element.Name == "Comment")
.Select(element => element.Value).ToList();
答案 1 :(得分:0)
您已设法获得与“标题”相匹配的<Field>
个元素。 Data
变量中的属性值条件。接下来,您可以使用Element()
获取<Field>
的子元素:
var result = Data.FirstOrDefault();
if(result != null)
{
Console.WriteLine((string)result.Element("Description"));
Console.WriteLine((string)result.Element("Comment"));
}
或者,如果有多个foreach
元素符合条件,则使用<Field>
:
foreach(result in Data)
{
Console.WriteLine((string)result.Element("Description"));
Console.WriteLine((string)result.Element("Comment"));
}