2012-10-15 76 views
8

在.NET中,如何從​​中讀取文本內容?從XElement中讀取文本內容

例如,從的XElement

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

我想字符串 '愛麗絲&鮑勃'


我想element.Value但回報 '愛麗絲&山貓' :(

+0

我很確定這是XML格式不正確,這就是爲什麼你有問題。標籤應該包含一個值或其他標籤,而不是兩個。 – Bobson

+2

'

對於流行的XML語言完全正常HTML

' –

+1

實際上,HTML不是XML,反之亦然。當然,它們是相關的,但只有XHTML纔是。 http://en.wikipedia.org/wiki/XHTML。如果你打算解析HTML,你應該使用HTML解析器。如果你正在解析XML,我仍然認爲這是非常糟糕的。 – Bobson

回答

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

使用element.FirstNode您可以獲取元素內的原始內容,「Alice & Bob「,所以你只需要」忽略「和號就可以得到你期待的結果。

1

嘗試下面的代碼它可以幫助你..

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

生成Alice & Bob – MMK

+0

嘗試使用此字符串s = System.Web.HttpUtility.HtmlDecode((string.Format(t.FirstNode.ToString())));確保System.Web Dll被引用。 – MMK

+0

你也可以使用這個以及string s = System.Net.WebUtility.HtmlDecode((string.Format(t.FirstNode.ToString()))); – MMK

2

只是因爲我最近也有類似的規定,我提供了:

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

會不會捕獲子節點的文本內容,但會連接當前元素中所有未加標籤的文本節點。

+0

這是最靈活的\通用的,因此有用的答案。 – mutex

+0

這但沒有concat是偉大的。 concat只會合併字符串並使結果不明確。 – user420667