Meskipun Anda mengatakan itu 'lebih baik' apakah ada kelemahan lain untuk melakukannya dengan cara ini daripada LINQ? Secara pribadi saya menemukan metode ini menjadi yang paling sederhana, setidaknya untuk kebutuhan saya.
Kolors
6
Saya menulis ini sebelum saya mulai menggunakan LINQ. LINQ bagus dan dapat dibaca lebih mudah. Saya kebanyakan menggunakan LINQ sendiri hari ini. Tetapi beberapa komponen memang membutuhkan objek XML gaya lama, sehingga masih digunakan sekarang dan nanti. Saya akan merekomendasikan mencoba "gaya lama" di sini dan LINQ dan melihat apa yang cocok untuk Anda.
Wolf5
1
Bukankah seharusnya XmlNode node = XmlDocument.Docu...garis itu benar XmlNode = doc.Docu...? Mengapa jawabannya diubah dan doc.dihapus?
wasatchwizard
Benar. Saya tidak tahu mengapa saya mengubah itu ... Akan diperbaiki.
// Loading from a file, you can also load from a streamvar xml =XDocument.Load(@"C:\contacts.xml");// Query the data and write out a subset of contactsvar query =from c in xml.Root.Descendants("contact")where(int)c.Attribute("id")<4select c.Element("firstName").Value+" "+
c.Element("lastName").Value;foreach(string name in query){Console.WriteLine("Contact's Full Name: {0}", name);}
XDocument.Parse ("<xml> something </xml>"); untuk sebuah string.
Wolf5
2
Orang-orang yang tidak termasuk di dalamnya kejam, terima kasih atas jawabannya :)
Gabriel Garcia
@GabrielGarcia benar, kadang-kadang pemula akan terjebak pada kesalahan include yang hilang
Anonymous
1
termasuk apa yang relevan?
sayth
18
Inilah aplikasi yang saya tulis untuk membaca peta situs xml:
usingSystem;usingSystem.Collections.Generic;usingSystem.Windows.Forms;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.IO;usingSystem.Data;usingSystem.Xml;namespaceSiteMapReader{classProgram{staticvoidMain(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 =newStreamWriter(Application.StartupPath+@"\locs.txt",true);// loop through each file foreach(string sitemap in sitemaps){try{// new xdoc instance XmlDocument xDoc =newXmlDocument();//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();}staticvoid readSitemap(){}}}
Xmlserializer. gunakan kelas dengan skema target yang ingin Anda baca - gunakan XmlSerializer untuk mendapatkan data dalam Xml yang dimuat ke instance kelas.
sangat baik! itu cara tercepat yang saya temukan untuk berbagi informasi dari kolom xml sql dan .net !!
elle0087
Tidak ideal bila Anda memiliki beberapa level karena tampaknya menempatkan setiap level ke dalam tabelnya sendiri di dalam dataset.
Lenny K
Itu masih baik untuk itu. Saya kira itu benar-benar tergantung pada seperti apa data Anda sebenarnya dan berapa banyak lapisan dalam data yang Anda cari.
publicvoidReadXmlFile(){string path =HttpContext.Current.Server.MapPath("~/App_Data");// Finds the location of App_Data on server.XmlTextReader reader =newXmlTextReader(System.IO.Path.Combine(path,"XMLFile7.xml"));//Combines the location of App_Data and the file namewhile(reader.Read()){switch(reader.NodeType){caseXmlNodeType.Element:break;caseXmlNodeType.Text:
columnNames.Add(reader.Value);break;caseXmlNodeType.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.
Jawaban:
XmlDocument untuk membaca XML dari string atau dari file.
atau
kemudian cari simpul di bawahnya yaitu seperti ini
atau
kemudian baca teks di dalam simpul itu seperti ini
atau membaca atribut
Selalu periksa nol pada Atribut ["sesuatu"] karena itu akan menjadi nol jika atribut tidak ada.
sumber
XmlNode node = XmlDocument.Docu...
garis itu benarXmlNode = doc.Docu...
? Mengapa jawabannya diubah dandoc.
dihapus?Contoh LINQ to XML :
Referensi : LINQ ke XML di MSDN
sumber
Inilah aplikasi yang saya tulis untuk membaca peta situs xml:
Kode pada Tempel Bin http://pastebin.com/yK7cSNeY
sumber
Ada banyak cara, beberapa di antaranya:
sumber
Anda dapat:
Contohnya ada pada halaman msdn yang disediakan
sumber
Linq ke XML.
Juga, VB.NET memiliki dukungan parsing xml jauh lebih baik melalui kompiler daripada C #. Jika Anda memiliki opsi dan keinginan, lihatlah.
sumber
Anda bisa menggunakan DataSet untuk membaca string XML.
Posting ini demi informasi.
sumber
Lihat kelas XmlTextReader misalnya.
sumber
Anda dapat menghindari pernyataan pertama dan cukup tentukan nama jalur di konstruktor XmlTextReader.
sumber
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.
sumber