如何从XDocument中获取子节点的值
本文关键字:子节点 获取 XDocument | 更新日期: 2023-09-27 18:10:59
我需要使用linq从XDocument获取子节点的值
<root>
<Cust>
<ACTNumber>1234</ACTNumber>
<Address>
<Street></Street>
<City>123 Main street</City>
<State>AL</State>
</Address>
</Cust>
</root>
我试过这个:xDocTest.Root.Elements("Cust").Elements("ACTNumber")
如果我尝试地址而不是ACTNumber,那么它的工作原理。但是它没有给子节点值
如果只有一个Cust
元素和一个ACTNumber
元素,那么很容易:
string actNumber = doc.Root.Element("Cust").Element("ACTNumber").Value;
或者作为long
:
long actNumber = (long) doc.Root.Element("Cust").Element("ACTNumber");
使用
xDocTest.Root.Element("Cust").Element("Adress").Element("City").Value
如果你使用Elements(注意它的复数形式),它会给你一个IEnumerable,它会像这样使用:
XML<Father>
<Child>Hello</Child>
<Child>World!</Child>
</Father>
c# foreach(var childElement in Root.Elements("Child")) Console.WriteLine(childElement.Value);
或者以你的例子:
foreach(var child in xdoc.Root.Element("Cust").Element("Address").Elements())
Console.WriteLine(string.Format("{0} : {1}", child.Name, child.Value);
我不确定元素如何行为,如果你有多个相同的名称的元素。因此,您可能希望对所有出现的元素使用Elements和iterate。
在Linq中如果有一个以上的客户…
var result = from cust in xdoc.Root.Elements("Cust")
where cust.Elements("ACTNumber").Any() // This is to make sure there
// is an element called ACTNumber
// otherwise .Value would create
// Nullrefexception.
select child.Element("ACTNumber").Value;