Câu trả lời:
XmlDocument để đọc XML từ chuỗi hoặc từ tệp.
XmlDocument doc = new XmlDocument();
doc.Load("c:\\temp.xml");
hoặc là
doc.LoadXml("<xml>something</xml>");
sau đó tìm một nút bên dưới nó tức là như thế này
XmlNode node = doc.DocumentElement.SelectSingleNode("/book/title");
hoặc là
foreach(XmlNode node in doc.DocumentElement.ChildNodes){
string text = node.InnerText; //or loop through its children as well
}
sau đó đọc văn bản bên trong nút đó như thế này
string text = node.InnerText;
hoặc đọc một thuộc tính
string attr = node.Attributes["theattributename"]?.InnerText
Luôn kiểm tra null trên các thuộc tính ["cái gì đó"] vì nó sẽ là null nếu thuộc tính không tồn tại.
XmlNode node = XmlDocument.Docu...
thực sự là dòng XmlNode = doc.Docu...
? Tại sao câu trả lời đã thay đổi và doc.
bị loại bỏ?
// Loading from a file, you can also load from a stream
var xml = XDocument.Load(@"C:\contacts.xml");
// Query the data and write out a subset of contacts
var query = from c in xml.Root.Descendants("contact")
where (int)c.Attribute("id") < 4
select c.Element("firstName").Value + " " +
c.Element("lastName").Value;
foreach (string name in query)
{
Console.WriteLine("Contact's Full Name: {0}", name);
}
Tham khảo : LINQ to XML tại MSDN
Đây là một ứng dụng tôi đã viết để đọc sơ đồ trang web xml:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Data;
using System.Xml;
namespace SiteMapReader
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Please Enter the Location of the file");
// get the location we want to get the sitemaps from
string dirLoc = Console.ReadLine();
// get all the sitemaps
string[] sitemaps = Directory.GetFiles(dirLoc);
StreamWriter sw = new StreamWriter(Application.StartupPath + @"\locs.txt", true);
// loop through each file
foreach (string sitemap in sitemaps)
{
try
{
// new xdoc instance
XmlDocument xDoc = new XmlDocument();
//load up the xml from the location
xDoc.Load(sitemap);
// cycle through each child noed
foreach (XmlNode node in xDoc.DocumentElement.ChildNodes)
{
// first node is the url ... have to go to nexted loc node
foreach (XmlNode locNode in node)
{
// thereare a couple child nodes here so only take data from node named loc
if (locNode.Name == "loc")
{
// get the content of the loc node
string loc = locNode.InnerText;
// write it to the console so you can see its working
Console.WriteLine(loc + Environment.NewLine);
// write it to the file
sw.Write(loc + Environment.NewLine);
}
}
}
}
catch { }
}
Console.WriteLine("All Done :-)");
Console.ReadLine();
}
static void readSitemap()
{
}
}
}
Mã trên Thùng dán http://pastebin.com/yK7cSNeY
Có rất nhiều cách, một số:
Bạn có thể:
Ví dụ trên các trang msDN được cung cấp
Ngoài ra, VB.NET có hỗ trợ phân tích xml tốt hơn nhiều thông qua trình biên dịch so với C #. Nếu bạn có tùy chọn và mong muốn, hãy kiểm tra nó.
Bạn có thể sử dụng Bộ dữ liệu để đọc các chuỗi XML.
var xmlString = File.ReadAllText(FILE_PATH);
var stringReader = new StringReader(xmlString);
var dsSet = new DataSet();
dsSet.ReadXml(stringReader);
Đăng bài này vì lợi ích của thông tin.
Kiểm tra lớp XmlTextReader chẳng hạn.
public void ReadXmlFile()
{
string path = HttpContext.Current.Server.MapPath("~/App_Data"); // Finds the location of App_Data on server.
XmlTextReader reader = new XmlTextReader(System.IO.Path.Combine(path, "XMLFile7.xml")); //Combines the location of App_Data and the file name
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
break;
case XmlNodeType.Text:
columnNames.Add(reader.Value);
break;
case XmlNodeType.EndElement:
break;
}
}
}
Bạn có thể tránh câu lệnh đầu tiên và chỉ định tên đường dẫn trong hàm tạo của XmlTextReader.
Có nhiều cách khác nhau, tùy thuộc vào nơi bạn muốn nhận. XmlDocument nhẹ hơn XDocument, nhưng nếu bạn muốn xác minh một cách tối giản rằng một chuỗi chứa XML, thì biểu thức chính quy có thể là lựa chọn nhanh nhất và nhẹ nhất bạn có thể thực hiện. Ví dụ: tôi đã triển khai Kiểm tra khói với SpecFlow cho API của mình và tôi muốn kiểm tra nếu một trong các kết quả trong bất kỳ XML hợp lệ nào - thì tôi sẽ sử dụng biểu thức chính quy. Nhưng nếu tôi cần trích xuất các giá trị từ XML này, thì tôi sẽ phân tích nó với XDocument để thực hiện nhanh hơn và với ít mã hơn. Hoặc tôi sẽ sử dụng XmlDocument nếu tôi phải làm việc với một XML lớn (và đôi khi tôi làm việc với XML có khoảng 1M dòng, thậm chí nhiều hơn); sau đó tôi thậm chí có thể đọc từng dòng một. Tại sao? Hãy thử mở hơn 800 MB theo byte riêng tư trong Visual Studio; ngay cả khi sản xuất, bạn không nên có các đối tượng lớn hơn 2GB. Bạn có thể với một twerk, nhưng bạn không nên. Nếu bạn phải phân tích một tài liệu chứa RẤT NHIỀU dòng thì tài liệu này có thể sẽ là CSV.
Tôi đã viết bình luận này, bởi vì tôi thấy một loạt các ví dụ với XDocument. XDocument không tốt cho các tài liệu lớn hoặc khi bạn chỉ muốn xác minh xem nội dung đó có hợp lệ không. Nếu bạn muốn kiểm tra xem bản thân XML có hợp lý hay không, thì bạn cần Schema.
Tôi cũng đánh giá thấp câu trả lời được đề xuất, bởi vì tôi tin rằng nó cần thông tin trên trong chính nó. Hãy tưởng tượng tôi cần xác minh xem 200M XML, 10 lần một giờ, có phải là XML hợp lệ không. XDocument sẽ lãng phí một nguồn tài nguyên.
prasanna venkatesh cũng nói rằng bạn có thể thử điền chuỗi vào tập dữ liệu, nó cũng sẽ chỉ ra XML hợp lệ.