2012-10-15 12 views
8

In .NET, come faccio a leggere il contenuto del testo da un XElement?Leggere il contenuto del testo da XElement

Ad esempio, dal XElement

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

Vorrei che la stringa 'Alice & Bob'


ho provato element.Value ma che restituisce 'Alice & Bobcat' :(

+0

Sono quasi sicuro che si tratta di XML mal formato, motivo per cui si verifica un problema. I tag dovrebbero contenere un valore o altri tag, non entrambi. – Bobson

+2

'

Perfettamente normale per quel linguaggio XML popolare chiamato HTML

' –

+1

In realtà, HTML non è XML e viceversa. Sono correlati, certamente, ma solo XHTML è entrambi. http://en.wikipedia.org/wiki/XHTML. Se stai analizzando l'HTML, dovresti utilizzare un parser HTML. Se stai analizzando l'XML, penso ancora che questo sia mal formato. – Bobson

risposta

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

Utilizzando element.FirstNode è possibile ottenere il contenuto non elaborato all'interno dell'elemento, "Alice & Bob ", quindi è sufficiente" annotare "la e commerciale e otterrai il risultato che ti aspetti.

1

Try seguente codice Potrebbe aiutare ..

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

produce Alice & Bob – MMK

+0

provare a utilizzare questa stringa s = System.Web.HttpUtility.HtmlDecode ((string.Format (t.FirstNode.ToString()))); Assicurarsi che si faccia riferimento alla DLL di System.Web. – MMK

+0

puoi anche usare questo anche string s = System.Net.WebUtility.HtmlDecode ((string.Format (t.FirstNode.ToString()))); – MMK

2

Proprio perché di recente ho avuto un requisito analogo, sto offrendo:

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

non Will cattura il contenuto testuale dei nodi figli, ma concatena tutti i nodi di testo senza tag nell'elemento corrente.

+0

Questa è la risposta più flessibile \ generica e quindi utile. – mutex

+0

Questo ma senza il concat è grandioso. Il concat semplicemente unirà stringhe e renderà il risultato ambiguo. – user420667

Problemi correlati