如何从XDocument获取子节点的值

我需要使用linq从XDocument获取子节点的值

  1234 
123 Main street AL

我试过这个: xDocTest.Root.Elements("Cust").Elements("ACTNumber")

如果我尝试使用Address而不是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

  Hello World!  

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); 

如果您有多个同名元素,我不确定Element的行为方式。 因此,您可能希望在所有出现时使用Elements和Inerate。

在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;