LINQ 解析 xml 文件并从特定节点获取值
LINQ parse xml file and get values from specific nodes
我有一个 xml 文件,我尝试从特定 nodes.But 检索数据,其中有一些节点丢失,所以我想 return 清空 string.Below 是我的代码示例,我正在使用 LINQ。
string xml = @"<root>
<employee>
<name>Val1</name>
<age>30</age>
</employee>
<employee>
<name>Val1</name>
<age>30</age>
<position>Priest</position>
</employee>
</root>";
XElement x = XElement.Parse(xml);
IEnumerable<XElement> details = x.Elements();
var valLst = (from el in details
where el.Element("name").Value.Equals("Val1")
select el.Value).ToList();
Details 对象包含 2 个员工节点及其子节点,所以我想根据名称节点 value.Also 获取子节点值,我想 return 空字符串作为节点缺失(例如,位置节点在第一部分中缺失,但在第二部分中存在)
提前致谢。
这是您的工作示例。你可以从这里开始
string xml = @"<root>
<employee>
<name>Val1</name>
<age>30</age>
</employee>
<employee>
<name>Val1</name>
<age>30</age>
<position>Priest</position>
</employee>
</root>";
XElement x = XElement.Parse(xml);
IEnumerable<XElement> details = x.Elements();
var valLst = (from el in details
let pos = (el.Element("position") == null ? string.Empty : el.Element("position").Value)
where el.Element("name").Value.Equals("Val1")
select new {n = el.Value, p = pos}).ToList();
Console.WriteLine(valLst[0].n + " - " + valLst[0].p);
Console.WriteLine(valLst[1].n + " - " + valLst[1].p);
输出:
Val130 -
Val130Priest - Priest
这会给你 IEnumerable<AnonymousType>
var valLst =(from el in details
select new
{
Name = el.Element("name").Value,
Position = el.Element("position")?.Value ?? ""
});
输出:
"{ Name = Val1, Position = }"
"{ Name = Val1, Position = Priest }"`
我有一个 xml 文件,我尝试从特定 nodes.But 检索数据,其中有一些节点丢失,所以我想 return 清空 string.Below 是我的代码示例,我正在使用 LINQ。
string xml = @"<root>
<employee>
<name>Val1</name>
<age>30</age>
</employee>
<employee>
<name>Val1</name>
<age>30</age>
<position>Priest</position>
</employee>
</root>";
XElement x = XElement.Parse(xml);
IEnumerable<XElement> details = x.Elements();
var valLst = (from el in details
where el.Element("name").Value.Equals("Val1")
select el.Value).ToList();
Details 对象包含 2 个员工节点及其子节点,所以我想根据名称节点 value.Also 获取子节点值,我想 return 空字符串作为节点缺失(例如,位置节点在第一部分中缺失,但在第二部分中存在)
提前致谢。
这是您的工作示例。你可以从这里开始
string xml = @"<root>
<employee>
<name>Val1</name>
<age>30</age>
</employee>
<employee>
<name>Val1</name>
<age>30</age>
<position>Priest</position>
</employee>
</root>";
XElement x = XElement.Parse(xml);
IEnumerable<XElement> details = x.Elements();
var valLst = (from el in details
let pos = (el.Element("position") == null ? string.Empty : el.Element("position").Value)
where el.Element("name").Value.Equals("Val1")
select new {n = el.Value, p = pos}).ToList();
Console.WriteLine(valLst[0].n + " - " + valLst[0].p);
Console.WriteLine(valLst[1].n + " - " + valLst[1].p);
输出:
Val130 -
Val130Priest - Priest
这会给你 IEnumerable<AnonymousType>
var valLst =(from el in details
select new
{
Name = el.Element("name").Value,
Position = el.Element("position")?.Value ?? ""
});
输出:
"{ Name = Val1, Position = }"
"{ Name = Val1, Position = Priest }"`