2010-06-03 21 views
11

câu hỏi đơn giản nhưng tôi đã nháy mắt với nó trong một giờ và nó thực sự bắt đầu làm tôi thất vọng. Tôi có XML trông như thế này:Lấy nội dung của nút XML bằng cách sử dụng C#

<TimelineInfo> 
    <PreTrialEd>Not Started</PreTrialEd> 
    <Ambassador>Problem</Ambassador> 
    <PsychEval>Completed</PsychEval> 
    </TimelineInfo> 

Và tất cả tôi muốn làm là sử dụng C# để có được chuỗi được lưu trữ giữa <Ambassador></Ambassador>.

Cho đến nay tôi có:

XmlDocument doc = new XmlDocument(); 
doc.Load("C:\\test.xml"); 
XmlNode x = doc.SelectSingleNode("/TimelineInfo/Ambassador"); 

đó chọn lưu ý tốt, bây giờ như thế nào trên thế giới để tôi có được nội dung trong đó không?

Trả lời

15

Tôi có thể đề xuất xem LINQ-to-XML (System.Xml.Linq) không?

var doc = XDocument.Load("C:\\test.xml"); 

string result = (string)doc.Root.Element("Ambassador"); 

LINQ-to-XML thân thiện hơn nhiều so với các lớp Xml * (System.Xml).


Nếu không, bạn sẽ có thể lấy giá trị của phần tử bằng cách truy xuất thuộc tính InnerText.

string result = x.InnerText; 
+0

Bạn không nên cần phải cast để XmlElement - innerText được định nghĩa trong XmlNode gốc là ảo và XmlElement chỉ ghi đè nó như bình thường. –

+1

BTW, trong trường hợp những người khác chạy ngang qua này - việc cast thành chuỗi rất quan trọng (XElement định nghĩa rất nhiều chuyển đổi rõ ràng để bạn có thể thực hiện những việc như thế này và không phải tự gọi phương thức Chuyển đổi) - bạn có thể bị cám dỗ ToString. không nhận được kết quả tương tự (nó sẽ lấy toàn bộ phần tử, bao gồm mở, đóng và nội dung) –

+0

BTW, vì trong đoạn mã ví dụ này, chúng tôi không thực sự sử dụng XDocument, một phiên bản hơi đơn giản hơn sẽ là XElement.Load tệp sẽ đưa bạn phần tử gốc trực tiếp. Tuy nhiên, đó chỉ là một điểm của câu đố - XDocument.Load chắc chắn là những gì bạn muốn sử dụng trong trường hợp điển hình. :) –

3
XmlDocument doc = new XmlDocument(); 
doc.Load("C:\\test.xml"); 
XmlNode x = doc.SelectSingleNode("/TimelineInfo/Ambassador"); 

x.InnerText sẽ trở lại với nội dung

+0

Đơn giản và hiệu quả. Thanh danh – Jay

4

Thuộc tính innerText nên làm việc tốt cho bạn.

http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.innertext.aspx

FWIW, bạn có thể xem xét chuyển đổi API để LINQ-to-xml (XElement và bạn bè) như IMHO đó là một thân thiện, dễ dàng hơn API để tương tác với.

phiên bản System.Xml (Chú ý: không có đúc để XmlElement cần thiết)

var xml = @"<TimelineInfo> 
       <PreTrialEd>Not Started</PreTrialEd> 
       <Ambassador>Problem</Ambassador> 
       <PsychEval>Completed</PsychEval> 
      </TimelineInfo>"; 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(xml); 
var node = doc.SelectSingleNode("/TimelineInfo/Ambassador"); 
Console.WriteLine(node.InnerText); 

LINQ-to-xml version:

var xml = @"<TimelineInfo> 
       <PreTrialEd>Not Started</PreTrialEd> 
       <Ambassador>Problem</Ambassador> 
       <PsychEval>Completed</PsychEval> 
      </TimelineInfo>"; 
var root = XElement.Parse(xml); 
string ambassador = (string)root.Element("Ambassador"); 
Console.WriteLine(ambassador); 
Các vấn đề liên quan