আমি কীভাবে সি # তে একটি এক্সএমএল ফাইল পড়ি এবং পার্স করব?


362

আমি কীভাবে সি # তে একটি এক্সএমএল ফাইল পড়ি এবং পার্স করব?


2
লিনকু থেকে এক্সএমএল ব্যবহার করা সর্বাধিক সাধারণ সলিউটিন। আমার উদাহরণ দেখুন।
কনস্টান্টিন তারকাস

উত্তর:


480

XML ডকুমেন্ট স্ট্রিং থেকে বা ফাইল থেকে একটি এক্সএমএল পড়তে read

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

সর্বদা ["কিছু"] বৈশিষ্ট্যগুলিতে নালীর জন্য যাচাই করুন কারণ বৈশিষ্ট্যটি বিদ্যমান না থাকলে এটি নাল হবে।


1
বৈধ, তবে লিনক থেকে এক্সএমএল অনেক সুন্দর।
ফিঙ্গলাস

3
যদিও আপনি বলছেন যে এটি 'ভাল' লিনকিউ দিয়ে এইভাবে করাতে অন্য কোনও অসুবিধা আছে? ব্যক্তিগতভাবে আমি এই পদ্ধতিটি সবচেয়ে সহজ, কমপক্ষে আমার প্রয়োজনের জন্য খুঁজে পেয়েছি for
কলার্স

6
আমি লিনকিউ ব্যবহার শুরু করার আগে এটি লিখেছিলাম। লিনকুই দুর্দান্ত এবং সহজেই পঠনযোগ্যতা থাকতে পারে। আমি আজকাল নিজেকে বেশিরভাগই লিনকিউ ব্যবহার করি। তবে কিছু উপাদানগুলির পুরানো শৈলীর এক্সএমএল অবজেক্টগুলির প্রয়োজন হয়, তাই এটি এখনও এবং তারপরে ব্যবহার করা যায়। আমি এখানে "ওল্ড স্টাইল" এবং লিনকিউ উভয়ই চেষ্টা করার পরামর্শ দিচ্ছি এবং আপনাকে কী ফিট করে তা দেখুন।
ওল্ফ 5

1
XmlNode node = XmlDocument.Docu...লাইনটি আসলেই হওয়া উচিত নয় XmlNode = doc.Docu...? কেন উত্তর পরিবর্তন এবং doc.সরানো হয়েছে?
wasatchwizard

সত্য। কেন আমি এটি পরিবর্তন করেছি ... আমার ঠিক ধারণা নেই fix
ওল্ফ

217

লিনিক থেকে এক্সএমএল উদাহরণ:

// 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);
}

রেফারেন্স : এমএসডিএন- তে এক্সএমএল থেকে লিনিকিউ


16
XDocument.Parse ( "<XML> কিছু </ XML>"); একটি স্ট্রিং জন্য।
ওল্ফ 5

2
ব্যক্তিগণকে অন্তর্ভুক্ত অন্তর্ভুক্ত করবেন না যে, মধ্যক উত্তরের জন্য ধন্যবাদ হউক না কেন :)
গাব্রিয়েল গার্সিয়া

@ গ্যাব্রিয়েল গার্সিয়া সত্য, কখনও কখনও সূচনা গায়েবি আটকে যেত এর ত্রুটি অন্তর্ভুক্ত
বেনামে

1
প্রাসঙ্গিক কি কি অন্তর্ভুক্ত?
sayth

18

এক্সএমএল সাইটম্যাপগুলি পড়ার জন্য আমি এখানে একটি আবেদন লিখেছি:

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


12

প্রচুর উপায় আছে, কিছু:

  • XmlSerializer। আপনি যে টার্গেট স্কিমাটি পড়তে চান সেগুলি সহ একটি ক্লাস ব্যবহার করুন - কোনও এক্সএমএলে ডেটা ক্লাসের কোনও উদাহরণে লোড করতে এক্সএমএসআরশায়ালাইজার ব্যবহার করুন।
  • লিনক 2 এক্সএমএল
  • XmlTextReader।
  • XmlDocument
  • এক্সপাথ ডকুমেন্ট (কেবলমাত্র পঠনযোগ্য অ্যাক্সেস)

2
প্রকৃতপক্ষে, .NET 2.0 থেকে সরাসরি এক্সএমএল টেক্সটরিডার ব্যবহার করার পরিবর্তে XMLReader.Create করুন।
জন স্যান্ডার্স


7

লিনক থেকে এক্সএমএল।

এছাড়াও, ভিবি.এনইটের সি # এর চেয়ে কমপ্লেক্সের মাধ্যমে আরও ভাল এক্সএমএল পার্সিং সমর্থন রয়েছে। আপনার যদি বিকল্প এবং ইচ্ছা থাকে তবে এটি পরীক্ষা করে দেখুন check


"সব ভুল"? সঠিক নয়, আমার মনে করা উচিত, যদি না যে বক্তব্যটি রসিকতা না করে। ওপিতে কোনও তথ্য সরবরাহ করা হয়নি। .NET সংস্করণ সম্পর্কে তিনি কাজ করছেন।
সেরিবেরাস

1
হ্যাঁ, হ্যাঁ এটি ঠাট্টা-বিদ্রূপের মধ্যে ছিল, কিন্তু আমি মজাদার না, তাই আমি এটি সরিয়ে দিয়েছি।

7

এক্সএমএল স্ট্রিংগুলি পড়তে আপনি একটি ডেটাসেট ব্যবহার করতে পারেন।

var xmlString = File.ReadAllText(FILE_PATH);
var stringReader = new StringReader(xmlString);
var dsSet = new DataSet();
dsSet.ReadXml(stringReader);

তথ্যের স্বার্থে এটি পোস্ট করা।


খুব ভাল! আমি এসকিএল এক্সএমএল কলাম এবং। নেট থেকে তথ্য ভাগ করে নেওয়ার দ্রুততম উপায় এটি !!
elle0087

যখন আপনার একাধিক স্তর রয়েছে তখন এটি আদর্শ নয় যেমন এটি প্রতিটি স্তরের নিজস্ব টেবিলে ডেটাসেটের মধ্যে রেখে দেবে।
লেনি কে

এটি এখনও জন্য ভাল। আমি অনুমান করি যে এটি আপনার ডেটা আসলে কেমন দেখায় এবং আপনি কতগুলি স্তর গভীরভাবে ডেটা করেন তার উপর নির্ভর করে।
ব্যবহারকারী 2366842


1
  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 এর কনস্ট্রাক্টরে পাথের নামটি নির্দিষ্ট করতে পারেন।


0

আপনি কোথায় পেতে চান তার উপর নির্ভর করে বিভিন্ন উপায় রয়েছে। এক্সএমএল ডকুমেন্ট এক্সডোকামেন্টের চেয়ে হালকা, তবে আপনি যদি স্ট্রিংয়ে এক্সএমএল অন্ততপক্ষে যাচাই করতে চান তবে নিয়মিত প্রকাশটি সম্ভবত আপনি করা সবচেয়ে দ্রুত এবং হালকা পছন্দ। উদাহরণস্বরূপ, আমি আমার এপিআই-এর জন্য স্পেকফ্লো দিয়ে স্মোক টেস্টগুলি প্রয়োগ করেছি এবং আমি যদি কোনও বৈধ এক্সএমএলে ফলাফলের একটি হয় তবে তা পরীক্ষা করতে চাই - তবে আমি একটি নিয়মিত এক্সপ্রেশন ব্যবহার করব। তবে যদি আমাকে এই এক্সএমএল থেকে মানগুলি বের করার প্রয়োজন হয় তবে আমি দ্রুত এবং কম কোড সহ এটি করার জন্য এটি এক্সডোকামেন্টের সাথে পার্স করব। অথবা আমি যদি একটি বড় এক্সএমএল নিয়ে কাজ করতে হয় তবে আমি এক্সএমএল ডকুমেন্ট ব্যবহার করতাম (এবং কখনও কখনও আমি এক্সএমএলগুলির সাথে প্রায় 1 এম লাইনের কাছাকাছিও কাজ করি); আমি এমনকি এটি লাইন লাইন পড়তে পারে। কেন? ভিজ্যুয়াল স্টুডিওতে প্রাইভেট বাইটে 800MB এরও বেশি খোলার চেষ্টা করুন; এমনকি উত্পাদনে আপনার 2GB এর চেয়ে বড় অবজেক্ট থাকা উচিত নয়। আপনি একটি twerk সঙ্গে করতে পারেন, কিন্তু আপনি করা উচিত নয়। আপনার যদি এমন কোনও দস্তাবেজ পার্স করতে হয়, যার মধ্যে প্রচুর লাইন থাকে, তবে এই নথিগুলি সম্ভবত সিএসভি হবে।

আমি এই মন্তব্যটি লিখেছি, কারণ আমি এক্সডোকামেন্টের সাথে অনেকগুলি উদাহরণ দেখতে পাচ্ছি। এক্স ডকুমেন্ট বড় ডকুমেন্টগুলির জন্য ভাল নয়, বা যখন আপনি কেবল যাচাই করতে চান সেখানে লিখিত সামগ্রীটি এক্সএমএল বৈধ কিনা। আপনি যদি এক্সএমএল নিজেই বুদ্ধিমান হয়ে যায় কিনা তা পরীক্ষা করতে চান তবে আপনার স্কিমা দরকার।

আমি প্রস্তাবিত উত্তরকেও হ্রাস করেছিলাম, কারণ আমার বিশ্বাস এটির নিজের মধ্যে উপরের তথ্যটি প্রয়োজন। কল্পনা করুন যে আমার 200 ঘন্টা এক্সএমএল, 10 ঘন্টা, 10 ঘন্টা বৈধ এক্সএমএল তা যাচাই করা দরকার। এক্সডোকামেন্টটি প্রচুর সংস্থানকে নষ্ট করবে।

প্রসন্ন ভেনকেটেশ আরও জানিয়েছে যে আপনি স্ট্রিংটি কোনও ডেটাসেটে পূরণ করার চেষ্টা করতে পারেন, এটি বৈধ এক্সএমএলকেও নির্দেশ করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.