2010-11-17 7 views
2

J'ai un fichier XML comme ceci:En utilisant LINQ to XML pour lire le texte à partir du fichier XML

<Root> 
    This is beginning of list of children. 
    <Children> 
     <Child Name="a">A</Child> 
     <Child Name="b">B</Child> 
     <Child Name="c">C</Child> 
    </Children> 
    This is end of list of children. 
</Root> 

J'utilise LINQ to XML (XDocument) pour lire ce fichier. Ce dont j'ai besoin c'est le "texte" dans l'élément racine, "Ceci est le début de la liste des enfants". Cependant quand j'inspecte l'attribut de la valeur de l'XElement se référant à la racine, je reçois ce qui suit:

Ceci est le début de la liste des enfants.ABCThis est la fin de la liste des enfants.

Qu'est-ce que je fais mal?

Répondre

2

Si vous voulez juste le premier nœud de texte (abstraction faite « Ceci est la fin de la liste des enfants », qui est un texte encore dans l'élément racine), vous pouvez utiliser:

var text = (string) doc.Root.Nodes() 
          .OfType<XText>() 
          .First() 
          .Value; 

Notez que cela contenir des espaces, donc vous pouvez vouloir le couper. Il suppose également que est au moins un nœud de texte.

+0

Génial, cela a fonctionné comme un charme! – SoftwareRockstar

2
var doc = XDocument.Parse(xml); 
var ele = doc.Element("Root"); 
string whatUWant = ele.FirstNode.ToString(); 

Ceci peut satisfaire votre exigence. BTW, Root.Value signifie la valeur entière du nœud "Root", de sorte que vous avez obtenu le résultat comme ça. J'imagine.

+0

Oui, vous avez raison, je ne savais pas que Root.Value signifiait la valeur entière de Root. – SoftwareRockstar

Questions connexes