2012-10-15 11 views
8

W .NET, jak mogę odczytać zawartość tekstu z XElement?Odczytywanie zawartości tekstowej z XElement

Na przykład, z Xelement

XElement.Parse("<tag>Alice &amp; Bob<other>cat</other></tag>") 

Chciałbym napis 'Alice & Bob


Próbowałem element.Value ale która zwraca 'Alice & Bobcat' :(

+0

Jestem prawie pewny, że to źle sformułowany XML, dlatego właśnie masz problem. Tagi powinny zawierać wartość lub inne znaczniki, a nie obie. – Bobson

+2

'

Idealnie normalne dla popularnego języka XML o nazwie HTML

' –

+1

W rzeczywistości HTML nie jest XML i na odwrót. Są z pewnością spokrewnieni, ale tylko XHTML to jedno i drugie. http://en.wikipedia.org/wiki/XHTML. Jeśli zamierzasz parsować HTML, powinieneś użyć parsera HTML. Jeśli analizujesz XML, nadal uważam, że jest źle sformułowany. – Bobson

Odpowiedz

9
XElement t = XElement.Parse("<tag>Alice &amp; Bob<other>cat</other></tag>"); 
string s = (t.FirstNode as XText).Value; 
0

Używając element.FirstNode możesz uzyskać surową zawartość zawartą w elemencie, "Alice & Bob ", więc potrzebujesz tylko" unescape "na ampersand, a otrzymasz wynik, którego się spodziewasz.

1

Spróbuj poniższy kod To może pomóc ..

namespace ConsoleApplication6 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var parent = XElement.Parse("<tag>Alice &amp; Bob<other>cat</other></tag>"); 
      var nodes = from x in parent.Nodes() 
          where x.NodeType == XmlNodeType.Text 
          select (XText)x; 

      foreach (var val in nodes) 
      { 
       Console.WriteLine(val.Value); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 
0
XElement t= XElement.Parse("<tag>Alice &amp; Bob<other>cat</other></tag>"); 
string s = t.FirstNode.ToString(); 
+1

produkuje Alice & Bob – MMK

+0

spróbuj użyć tego ciągu s = System.Web.HttpUtility.HtmlDecode ((string.Format (t.FirstNode.ToString()))); Upewnij się, że odwołuje się do Dll System.Web. – MMK

+0

możesz również użyć tego również string s = System.Net.WebUtility.HtmlDecode ((string.Format (t.FirstNode.ToString()))); – MMK

2

Tylko dlatego Niedawno miałem podobny wymóg, jestem oferując:

var x = XElement.Parse("<tag>Alice &amp; Bob<other>cat</other></tag>") 
var text = string.Concat(x.Nodes().OfType<XText>().Select(t => t.Value)); 

nie Will przechwytuje treść tekstową węzłów potomnych, ale łączy wszystkie nieoznakowane węzły tekstowe w bieżącym elemencie.

+0

Jest to najbardziej elastyczna \ ogólna i dlatego przydatna odpowiedź. – mutex

+0

To, ale bez konkat jest świetne. Concat połączy ciągi i sprawi, że wynik będzie niejednoznaczny. – user420667