2012-10-15 43 views
8

Trong .NET, làm cách nào để đọc nội dung văn bản từ một số XElement?Đọc nội dung văn bản từ XElement

Ví dụ, từ XElement

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

Tôi muốn chuỗi 'Alice & Bob'


tôi đã cố gắng element.Value nhưng đó lợi nhuận 'Alice & Bobcat' :(

+0

Tôi khá chắc chắn đó là XML được định dạng sai, đó là lý do tại sao bạn gặp sự cố. Thẻ phải chứa giá trị hoặc các thẻ khác, không phải cả hai. – Bobson

+2

'

Hoàn toàn bình thường đối với ngôn ngữ XML phổ biến đó được gọi là HTML

' –

+1

Thực ra, HTML không phải là XML và ngược lại. Họ liên quan, chắc chắn, nhưng chỉ XHTML là cả hai. http://en.wikipedia.org/wiki/XHTML. Nếu bạn định phân tích HTML, bạn nên sử dụng trình phân tích cú pháp HTML. Nếu bạn đang phân tích cú pháp XML, tôi vẫn nghĩ rằng điều này được hình thành không đúng. – Bobson

Trả lời

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

Sử dụng element.FirstNode bạn có thể lấy nội dung thô mà bạn có bên trong phần tử "Alice & Bob ", vì vậy bạn chỉ cần" không nhìn thấy "dấu và bạn sẽ nhận được kết quả mà bạn đang mong đợi.

1

Hãy thử đoạn mã sau Nó có thể giúp bạn ..

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

sản xuất Alice & Bob – MMK

+0

thử sử dụng chuỗi này s = System.Web.HttpUtility.HtmlDecode ((string.Format (t.FirstNode.ToString()))); Hãy chắc chắn rằng System.Web Dll đang được tham chiếu. – MMK

+0

bạn cũng có thể sử dụng chuỗi này s = System.Net.WebUtility.HtmlDecode ((string.Format (t.FirstNode.ToString()))); – MMK

2

Chỉ vì thời gian gần đây tôi đã có một yêu cầu tương tự, tôi là cung cấp lên:

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

Sẽ không nắm bắt nội dung văn bản của các nút con, nhưng sẽ nối tất cả các nút văn bản không được gắn thẻ trong phần tử hiện tại.

+0

Đây là câu trả lời linh hoạt nhất và hữu ích nhất. – mutex

+0

Điều này nhưng không có concat là tuyệt vời. Các concat sẽ chỉ hợp nhất các chuỗi và làm cho kết quả mơ hồ. – user420667

Các vấn đề liên quan