जवाबों:
XmlDocument स्ट्रिंग या फ़ाइल से XML पढ़ने के लिए।
XmlDocument doc = new XmlDocument();
doc.Load("c:\\temp.xml");
या
doc.LoadXml("<xml>something</xml>");
फिर इसके नीचे एक नोड खोजें
XmlNode node = doc.DocumentElement.SelectSingleNode("/book/title");
या
foreach(XmlNode node in doc.DocumentElement.ChildNodes){
string text = node.InnerText; //or loop through its children as well
}
फिर इस तरह उस नोड के अंदर का पाठ पढ़ें
string text = node.InnerText;
या एक विशेषता पढ़ें
string attr = node.Attributes["theattributename"]?.InnerText
हमेशा विशेषताएँ ["कुछ"] पर अशक्त के लिए जाँच करें क्योंकि यह अशक्त होगा यदि विशेषता मौजूद नहीं है।
XmlNode node = XmlDocument.Docu...
लाइन वास्तव में नहीं होनी चाहिए XmlNode = doc.Docu...
? जवाब क्यों बदला गया और doc.
हटा दिया गया?
// 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);
}
संदर्भ : MSDN पर LINQ to XML
यहाँ एक आवेदन मैंने 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()
{
}
}
}
कोड पर पेस्ट बिन http://pastebin.com/yK7cSNeY
बहुत सारे रास्ते हैं, कुछ:
आप या तो यह कर सकते हैं:
उदाहरण प्रदान किए गए msdn पृष्ठों पर हैं
इसके अलावा, VB.NET में C # की तुलना में कंपाइलर के माध्यम से बेहतर xml पार्सिंग समर्थन है। यदि आपके पास विकल्प और इच्छा है, तो इसे देखें।
XML स्ट्रिंग्स को पढ़ने के लिए आप डेटासेट का उपयोग कर सकते हैं।
var xmlString = File.ReadAllText(FILE_PATH);
var stringReader = new StringReader(xmlString);
var dsSet = new DataSet();
dsSet.ReadXml(stringReader);
जानकारी के लिए इसे पोस्ट करना।
उदाहरण के लिए XmlTextReader वर्ग देखें ।
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;
}
}
}
आप पहले कथन से बच सकते हैं और XmlTextReader के निर्माण में पथ का नाम निर्दिष्ट कर सकते हैं।
अलग-अलग तरीके हैं, इस पर निर्भर करता है कि आप कहाँ जाना चाहते हैं। XmlDocument XDocument की तुलना में हल्का है, लेकिन यदि आप न्यूनतम सत्यापित करना चाहते हैं कि स्ट्रिंग में XML है, तो नियमित अभिव्यक्ति संभवतः सबसे तेज़ और सबसे हल्का विकल्प है जिसे आप बना सकते हैं। उदाहरण के लिए, मैंने अपने एपीआई के लिए SpecFlow के साथ स्मोक टेस्ट को लागू किया है और मैं परीक्षण करना चाहता हूं कि क्या किसी भी वैध XML में एक परिणाम - तो मैं एक नियमित अभिव्यक्ति का उपयोग करूंगा। लेकिन अगर मुझे इस XML से मान निकालने की ज़रूरत है, तो मैं इसे XDocument के साथ पार्स करने के लिए इसे तेज़ी से और कम कोड के साथ पार्स करूंगा। या अगर मैं एक बड़ी XML के साथ काम करना चाहता हूं, तो मैं XmlDocument का उपयोग करूंगा (और कभी-कभी मैं XML के साथ काम करता हूं जो लगभग 1M लाइनें हैं, और भी अधिक); तब मैं इसे लाइन से लाइन भी पढ़ सकता था। क्यों? विजुअल स्टूडियो में निजी बाइट्स में 800MB से अधिक खोलने का प्रयास करें; उत्पादन पर भी आपके पास 2GB से बड़ी वस्तु नहीं होनी चाहिए। आप एक मरोड़ के साथ कर सकते हैं, लेकिन आपको नहीं करना चाहिए। यदि आपको किसी दस्तावेज़ को पार्स करना होगा, जिसमें ए लॉट ऑफ़ लाइन्स हैं, तो यह दस्तावेज़ शायद सीएसवी होगा।
मैंने यह टिप्पणी इसलिए लिखी है, क्योंकि मुझे XDocument के उदाहरणों का एक बहुत कुछ दिखाई देता है। XDocument बड़े दस्तावेज़ों के लिए अच्छा नहीं है, या जब आप केवल यह सत्यापित करना चाहते हैं कि क्या सामग्री XML वैध है। यदि आप जांचना चाहते हैं कि क्या XML खुद समझ में आता है, तो आपको स्कीमा की जरूरत है।
मैंने सुझाए गए उत्तर को भी अस्वीकार कर दिया, क्योंकि मेरा मानना है कि इसे अपने अंदर उपरोक्त जानकारी की आवश्यकता है। कल्पना कीजिए कि अगर मुझे XML की 200M, एक घंटे में 10 बार, वैध XML की पुष्टि करनी है। XDocument संसाधनों की एक बहुत बर्बाद करेगा।
prasanna venkatesh में यह भी कहा गया है कि आप स्ट्रिंग को किसी डेटासेट में भरने का प्रयास कर सकते हैं, यह वैध XML को भी इंगित करेगा।