2012-10-15 15 views
8

.NET'te, metin içeriğini bir XElement'dan nasıl okuyabilirim? Ben dize istiyorumXElement öğesinden okuma metni içeriği

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

XElement dan Örneğin

, 'Alice & Bob' ı element.Value ama döndürüyor 'Alice & Bobcat' :(o

+0

Oldukça kötü bir şekilde oluşturulmuş XML olduğuna eminim, bu yüzden bir sorun yaşıyorsunuz. Etiketler, her ikisinde de bir değer veya başka etiket içermelidir. – Bobson

+2

'

olarak adlandırılan bu popüler XML dili için normal olarak normal

' –

+1

Aslında HTML XML değil veya tam tersi. Kesinlikle ilintiler, ama sadece XHTML her ikisi de. http://en.wikipedia.org/wiki/XHTML. HTML'yi ayrıştıracaksanız, bir HTML ayrıştırıcısı kullanmalısınız. XML'yi ayrıştırıyorsanız, bunun kötü bir şekilde oluştuğunu düşünüyorum. – Bobson

cevap

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


element.FirstNode'u kullanarak öğenin içinde sahip olduğunuz ham içeriği alabilirsiniz, "Alice & Bob ", bu nedenle," ve "işareti" unescape "sadece ihtiyacım var ve beklediğiniz sonucu alırsınız. Bu size yardımcı olabilir

1

deneyin Aşağıdaki kod ..

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(); 
     } 
    } 
} 
Geçenlerde benzer bir şartı vardı diye
0
XElement t= XElement.Parse("<tag>Alice &amp; Bob<other>cat</other></tag>"); 
string s = t.FirstNode.ToString(); 
+1

, Alice & Bob – MMK

+0

bu dizeyi s = System.Web.HttpUtility.HtmlDecode (= string.Format (t.FirstNode.ToString()))) kullanarak deneyin; System.Web Dll başvurulan olduğundan emin olun. – MMK

+0

da kullanabilirsiniz bu da dize s = System.Net.WebUtility.HtmlDecode ((string.Format (t.FirstNode.ToString()))); – MMK

2

, ayağa teklif ediyorum:

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

Değil alt düğümlerin metin içeriğini yakalar, ancak geçerli öğedeki etiketlenmemiş tüm metin düğümlerini birleştirir.

+0

Bu, en esnek \ generic ve dolayısıyla kullanışlı bir cevaptır. – mutex

+0

Bu ancak concat olmadan harika. Konser sadece dizeleri birleştirecek ve sonucu belirsizleştirecek. – user420667

İlgili konular