J'ai besoin d'obtenir la valeur du nœud enfant de XDocument en utilisant linq
<root>
<Cust>
<ACTNumber>1234</ACTNumber>
<Address>
<Street></Street>
<City>123 Main street</City>
<State>AL</State>
</Address>
</Cust>
</root>
J'ai essayé ceci: xDocTest.Root.Elements("Cust").Elements("ACTNumber")
Si j'essaie Adresse au lieu de ACTNumber alors cela fonctionne. Mais cela ne donne pas de valeur au nœud enfant.
S'il n'y a qu'un seul élément Cust
et un seul élément ACTNumber
, alors c'est simple:
string actNumber = doc.Root.Element("Cust").Element("ACTNumber").Value;
Ou pour l'obtenir sous forme de long
:
long actNumber = (long) doc.Root.Element("Cust").Element("ACTNumber");
Utilisez ceci:
xDocTest.Root.Element("Cust").Element("Adress").Element("City").Value
Si vous utilisez Elements (notez le pluriel), cela vous donne un IEnumerable, ceci serait utilisé comme ceci:
XML
<Father>
<Child>Hello</Child>
<Child>World!</Child>
</Father>
C #
foreach(var childElement in Root.Elements("Child")) Console.WriteLine(childElement.Value);
Ou pour prendre votre exemple:
foreach(var child in xdoc.Root.Element("Cust").Element("Address").Elements())
Console.WriteLine(string.Format("{0} : {1}", child.Name, child.Value);
Je ne sais pas comment Element se comporte si vous avez plusieurs éléments du même nom. Vous pouvez donc utiliser Elements et Inerate sur toutes les occurrences.
Et à Linq S'il y a plus d'un client ...
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;