2011-11-10 20 views
21

Tôi có một số mã được trả lại một XNode với tôi trông như thế này:giá trị đọc từ bên trong một XNode

<File> 
    <Component>Main</Component> 
    <Path>C:\Main\</Path> 
    <FileName>main.txt</FileName> 
</File> 

tôi cần phải có một số mã C# mà sẽ có thể kéo ra giá trị của con đường ví dụ (C: \ Main). Tôi biết rằng nếu tôi đang sử dụng nút XML, tôi có thể làm như sau:

String filePath = xmlNode["Path"].InnerText; 

Có ai biết tương đương với XNX không? Bất kỳ sự giúp đỡ nào cũng được đánh giá cao!

Trả lời

42

Bạn có để trả lại số XNode thay vì XElement? Với một XElement nó đơn giản hơn với một XNode:

string filePath = fileElement.Element("Path").Value; 

Điều đó sẽ tìm ra yếu tố đầu tiên Path, và sẽ ném một NullReferenceException nếu không có bất kỳ. Một thay thế nếu bạn đang hạnh phúc để có được null nếu không có bất kỳ sẽ là:

string filePath = (string) fileElement.Element("Path"); 

Nếu bạn đang thực sự bị mắc kẹt với XNode, bạn sẽ có thể sở để đúc để XElement hoặc có thể XContainer.

+0

Im nhận được ngoại lệ khi cố gắng đúc để XElement. Bạn có một giải pháp cho điều đó? Cảm ơn trước – ot0

+0

@ ot0: Không cần biết thêm ngữ cảnh, không. Tôi đề nghị bạn hỏi một câu hỏi mới với một ví dụ. –

+0

XElement xelm = (XElement) XNodeObject; return exception – ot0

0

Bạn có thể sử dụng này:

XElement xtr = XElement.Load("path/to/your/xml/file"); 
String filePath = xtr.Descendants("Path").Single().Value; 
7

Bạn có thể chuyển đổi XNode của bạn vào XElement để truy cập vào thuộc tính của nó, ví dụ của tôi:

XNode lastNode = myXElement.LastNode; 

//if I want to get the 'ID' attribute 
string id = (lastNode as XElement).Attribute("ID").Value; 
+0

Không phải là downcasting xấu? – batbaatar

+0

Ahhh, cảm ơn. Tôi bây giờ thấy XElement sẽ làm việc tốt, mặc dù. – AndrewRalon

0

Nếu bạn nhập System.Xml.XPath bạn có thể sử dụng XPathSelectElement như thế này trên đối tượng XNode:

String component = xmlNode.XPathSelectElement("Component"); 
String path = xmlNode.XPathSelectElement("Path"); 
String fileName = xmlNode.XPathSelectElement("FileName"); 
0

Casting XNode to XElement works for the individ yếu tố ual để lấy giá trị hoặc thuộc tính của nó. Nhưng bạn sẽ không thể sử dụng myXelement.Elements ("XXX") để nhận các phần tử lồng nhau. Bạn có thể sử dụng xmlNode.Nodes().

này nên làm việc:

var nodes = xmlNode.Nodes();//Get all nodes under 'File' 
var fileNameNode = nodes.Where(el => ((XElement)el).Name.LocalName == "FileName") 
.FirstOrDefault(); 
string filePath = ((XElement)fileNameNode).Value; 
Các vấn đề liên quan