Jawaban:
XmlDocument untuk membaca XML dari string atau dari file.
XmlDocument doc = new XmlDocument();
doc.Load("c:\\temp.xml");
atau
doc.LoadXml("<xml>something</xml>");
kemudian cari simpul di bawahnya yaitu seperti ini
XmlNode node = doc.DocumentElement.SelectSingleNode("/book/title");
atau
foreach(XmlNode node in doc.DocumentElement.ChildNodes){
string text = node.InnerText; //or loop through its children as well
}
kemudian baca teks di dalam simpul itu seperti ini
string text = node.InnerText;
atau membaca atribut
string attr = node.Attributes["theattributename"]?.InnerText
Selalu periksa nol pada Atribut ["sesuatu"] karena itu akan menjadi nol jika atribut tidak ada.
XmlNode node = XmlDocument.Docu...
garis itu benar XmlNode = doc.Docu...
? Mengapa jawabannya diubah dan doc.
dihapus?
// 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);
}
Referensi : LINQ ke XML di MSDN
Inilah aplikasi yang saya tulis untuk membaca peta situs 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()
{
}
}
}
Kode pada Tempel Bin http://pastebin.com/yK7cSNeY
Ada banyak cara, beberapa di antaranya:
Anda dapat:
Contohnya ada pada halaman msdn yang disediakan
Anda bisa menggunakan DataSet untuk membaca string XML.
var xmlString = File.ReadAllText(FILE_PATH);
var stringReader = new StringReader(xmlString);
var dsSet = new DataSet();
dsSet.ReadXml(stringReader);
Posting ini demi informasi.
Lihat kelas XmlTextReader misalnya.
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;
}
}
}
Anda dapat menghindari pernyataan pertama dan cukup tentukan nama jalur di konstruktor XmlTextReader.
Ada berbagai cara, tergantung dari mana Anda ingin mendapatkannya. XmlDocument lebih ringan dari XDocument, tetapi jika Anda ingin memverifikasi secara minimalis bahwa sebuah string berisi XML, maka ekspresi reguler mungkin merupakan pilihan tercepat dan teringan yang dapat Anda buat. Misalnya, saya telah menerapkan Tes Asap dengan SpecFlow untuk API saya dan saya ingin menguji apakah salah satu hasil dalam XML yang valid - maka saya akan menggunakan ekspresi reguler. Tetapi jika saya perlu mengekstrak nilai dari XML ini, maka saya akan menguraikannya dengan XDocument untuk melakukannya lebih cepat dan dengan kode yang lebih sedikit. Atau saya akan menggunakan XmlDocument jika saya harus bekerja dengan XML besar (dan kadang-kadang saya bekerja dengan XML yang sekitar 1M baris, bahkan lebih); maka saya bahkan bisa membacanya baris demi baris. Mengapa? Coba buka lebih dari 800MB dalam byte pribadi di Visual Studio; bahkan pada produksi Anda seharusnya tidak memiliki objek yang lebih besar dari 2GB. Anda bisa dengan seorang twerk, tetapi seharusnya tidak. Jika Anda harus mengurai dokumen, yang berisi BANYAK garis, maka dokumen ini mungkin CSV.
Saya telah menulis komentar ini, karena saya melihat banyak contoh dengan XDocument. XDocument tidak baik untuk dokumen besar, atau ketika Anda hanya ingin memverifikasi apakah ada konten yang valid XML. Jika Anda ingin memeriksa apakah XML itu sendiri masuk akal, maka Anda perlu Skema.
Saya juga downvoted jawaban yang disarankan, karena saya percaya perlu informasi di atas sendiri. Bayangkan saya perlu memverifikasi apakah 200M XML, 10 kali dalam satu jam, adalah XML yang valid. XDocument akan membuang banyak sumber daya.
prasanna venkatesh juga menyatakan Anda bisa mencoba mengisi string ke dataset, itu juga akan menunjukkan XML yang valid.