xml子元素节点或属性值
xml child element node or attribute value
我有一个包含嵌套 xml 元素的 xml 架构,下面是其中的一小部分
<aa>
<id extension="xx" root="56" />
<name>demo</name>
<telecom use="emer" value="tel:34444" />
</aa>
<bb>
<value value="12345" />
</bb>
<cc>
<value value="234567" />
</cc>
据此,我必须获取 "aa tag" 下的 "name tag" 的值,电信标签的最后一个属性 (tel:),以及 "value tag" 的属性值(即在 bb 标签和 cc 标签下找到)
我尝试了以下代码,但它并没有达到我的预期。
xDoc.Descendants().Where(x => x.Name.LocalName.Equals("aa")
|| x.Name.LocalName.Equals("telecom") &&
(x.FirstAttribute.Equals("EC")
|| x.Name.LocalName.Equals("bb")
|| x.Name.LocalName.Equals("cc"))
请提供此问题的解决方案。
您需要 select 每个值的适当后代,然后通过使用适当的 linq 查询,您可以 select 所需的值
class Program
{
public static void Main(string[] args)
{
XDocument doc = XDocument.Load(@"Path to your xml file");
var name = doc.Descendants("organisation").Elements().Where(x => x.Name == "name").Select(x => (string)x).FirstOrDefault();
var tel = doc.Descendants("organisation").Elements().Where(x => x.Name == "telecom").Select(x => x.Attribute("value").Value).FirstOrDefault();
var bb_value = doc.Descendants("startdate").Elements().Where(x => x.Name == "value").Select(x => x.Attribute("value").Value).FirstOrDefault();
var cc_value = doc.Descendants("enddate").Elements().Where(x => x.Name == "value").Select(x => x.Attribute("value").Value).FirstOrDefault();
Console.WriteLine($"name: {name} \ntel: {tel} \nbb_value: {bb_value} \ncc_value: {cc_value}");
Console.ReadLine();
}
}
输出:
我有一个包含嵌套 xml 元素的 xml 架构,下面是其中的一小部分
<aa>
<id extension="xx" root="56" />
<name>demo</name>
<telecom use="emer" value="tel:34444" />
</aa>
<bb>
<value value="12345" />
</bb>
<cc>
<value value="234567" />
</cc>
据此,我必须获取 "aa tag" 下的 "name tag" 的值,电信标签的最后一个属性 (tel:),以及 "value tag" 的属性值(即在 bb 标签和 cc 标签下找到)
我尝试了以下代码,但它并没有达到我的预期。
xDoc.Descendants().Where(x => x.Name.LocalName.Equals("aa")
|| x.Name.LocalName.Equals("telecom") &&
(x.FirstAttribute.Equals("EC")
|| x.Name.LocalName.Equals("bb")
|| x.Name.LocalName.Equals("cc"))
请提供此问题的解决方案。
您需要 select 每个值的适当后代,然后通过使用适当的 linq 查询,您可以 select 所需的值
class Program
{
public static void Main(string[] args)
{
XDocument doc = XDocument.Load(@"Path to your xml file");
var name = doc.Descendants("organisation").Elements().Where(x => x.Name == "name").Select(x => (string)x).FirstOrDefault();
var tel = doc.Descendants("organisation").Elements().Where(x => x.Name == "telecom").Select(x => x.Attribute("value").Value).FirstOrDefault();
var bb_value = doc.Descendants("startdate").Elements().Where(x => x.Name == "value").Select(x => x.Attribute("value").Value).FirstOrDefault();
var cc_value = doc.Descendants("enddate").Elements().Where(x => x.Name == "value").Select(x => x.Attribute("value").Value).FirstOrDefault();
Console.WriteLine($"name: {name} \ntel: {tel} \nbb_value: {bb_value} \ncc_value: {cc_value}");
Console.ReadLine();
}
}
输出: