এক্সএমএল ডকুমেন্টকে স্ট্রিংয়ে রূপান্তর করুন


218

এখানে কিভাবে আমি বর্তমানে রূপান্তর করছি XMLDocument করার স্ট্রিং

StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter);

xmlDoc.WriteTo(xmlTextWriter);

return stringWriter.ToString();

এই পদ্ধতির সমস্যাটি হ'ল যদি আমার কাছে " ((উদ্ধৃতি) থাকে যা আমার মধ্যে বৈশিষ্ট্যগুলি থাকে) এটি সেগুলি থেকে পালিয়ে যায়।

এই ক্ষেত্রে:

<Campaign name="ABC">
</Campaign>

উপরে প্রত্যাশিত এক্সএমএল রয়েছে। তবে তা ফিরে আসে

<Campaign name=\"ABC\">
</Campaign>

আমি স্ট্রিং করতে পারি ep প্রতিস্থাপন "\" তবে কি এই পদ্ধতিটি ঠিক আছে? কোন পার্শ্ব প্রতিক্রিয়া আছে কি? যদি এক্সএমএল নিজেই একটি "\" থাকে তবে এটি ঠিকঠাক কাজ করবে?

উত্তর:


179

কোন উদ্ধৃতি নেই। এটি কেবল ভিএস ডিবাগার। কনসোলে মুদ্রণ করার চেষ্টা করুন বা একটি ফাইল সংরক্ষণ করার চেষ্টা করুন এবং আপনি দেখতে পাবেন। পার্শ্ব নোট হিসাবে: সর্বদা নিষ্পত্তিযোগ্য বস্তুগুলি নিষ্পত্তি করুন:

using (var stringWriter = new StringWriter())
using (var xmlTextWriter = XmlWriter.Create(stringWriter))
{
    xmlDoc.WriteTo(xmlTextWriter);
    xmlTextWriter.Flush();
    return stringWriter.GetStringBuilder().ToString();
}

2
ব্যবহার করতে কোড ফিক্সিং জন্য +1 usingব্লক এবং XmlTextWriter
জন স্যান্ডার্স

1
লক্ষণীয় কিছু (এখানে মন্তব্যগুলিতে যেমন উল্লেখ করা হয়েছে: msdn.microsoft.com/en-us/library/system.xML.xMLwriter.aspx ) যে আপনি XMLWriter এর বন্ধ পদ্ধতিটি কল না করা পর্যন্ত উপাদান এবং বৈশিষ্ট্যগুলি লেখা হবে না।
টোন

তাদের কিছু অবিলম্বে লেখা যেতে পারে। এটি বাফারিংয়ের উপর নির্ভর করে। নির্বিশেষে, আমি একটি কল যুক্ত করেছি Flush, যদিও ব্লকটি Closeবন্ধ করা বা কেবল বন্ধ করা xmlTextWriter usingএকই কাজটি সম্পাদন করবে।
ব্রায়ান

12
এক্সএমএলকে সুন্দর করে তোলার জন্য, এই সেটিংসগুলিতে XMLWriter- এর কাছে আপত্তি দিন re settings.Indent = সত্য; settings.IndentChars = ""; settings.Encoding = encoding.UTF8;
অ্যাডাম ব্রাস

655

ধরে নিই যে এক্সএমএলডোক একটি এক্সএমএল ডকুমেন্ট অবজেক্টটি কি এক্সএমএলডোক.অউটারএক্সএল?

return xmlDoc.OuterXml;

OuterXml সম্পত্তি XML একটি স্ট্রিং সংস্করণ ফেরৎ।


3
ঠিক আছে আপনি ঠিক বলেছেন। আমি প্রথমে চেষ্টা করেছিলাম কিন্তু যখন আমি ডিবাগারে উদ্ধৃতিগুলি দেখি। আমি আউটটারএক্সএমএল এর কারণেই ভেবেছিলাম এবং স্ট্রিং রাইটার পদ্ধতিটি চেষ্টা করে দেখছি। তবে আমি ভুল ছিলাম উদ্ধৃতিগুলি কেবলমাত্র ডিবাগারে ছিল। সুতরাং আমি কেবল আউটটারএক্সএমএল ব্যবহার করব। ধন্যবাদ
আকিফ

আমার জন্য কাজ! এক্সএমএলডোকের জন্য কেবল একটি নাল চেক করুন! xMLDoc == নাল? "এক্সএমএমএলডোক নাল": xMLDoc.OuterXML;
সরজন ওয়েলদেব

1
@ সরজন ওয়েলদেব আপনি যদি ভাবেন যে আপনার বস্তুটি শূন্য হতে পারে তবে নাল চেকটি এখানে না বলে এবং প্রতিটি উত্তরের জন্য চলে যাবে; এবং সত্যিকার অর্থে সি # তে থাকা কোনও বস্তুর সাথে প্রতিটি মিথস্ক্রিয়ার জন্য - ব্যক্তিগতভাবে আমি চেষ্টা করি যে সবসময় অবজেক্টগুলি তৈরি করা হয় যাতে আমাকে কোথাও নাল-চেক সহ কোডটি ফোটানো না হয় ... আমার ধারণা এটি কেবল আপনার কোড বেসের উপর নির্ভর করে .. ।
ক্রিস মাউত্রে

10
(y) তবে আউটারএক্সএমএল <ডাব্লিউটিএল ট্যাগ <? xML সংস্করণ = "1.0" এনকোডিং = "utf-16"?>
হ্যাজ্যাক

3
@hazjack আপনি ঘোষণামূলক ট্যাগ চান তারপর করা XmlDeclaration ক্লাস ব্যবহার msdn.microsoft.com/en-us/library/system.xml.xmldeclaration.aspx - আপনি তারপর তারপর তারপর দায়ের পদ্ধতি পাওয়া সংরক্ষণ ব্যবহার করার জন্য এটি লিখতে চান আপনি XmlDocument উদাহরণস্বরূপ উপর msdn.microsoft.com/en-us/library/dw229a22.aspx - আমাকে ঘোষণামূলক ট্যাগ শুধুমাত্র জ্ঞান করে তোলে যদি তুমি লেখা ফাইল এবং না একটি সি # স্ট্রিং বলতে
ক্রিস Moutray

10

যদি আপনি Windows.Data.Xml.Dom.XmlDocumentসংস্করণ XmlDocumentব্যবহার করেন (উদাহরণস্বরূপ ইউডাব্লুপি অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়), আপনি yourXmlDocument.GetXml()স্ট্রিং হিসাবে এক্সএমএল পেতে ব্যবহার করতে পারেন ।


5

এক্সটেনশন পদ্ধতি হিসাবে:

public static class Extensions
{
    public static string AsString(this XmlDocument xmlDoc)
    {
        using (StringWriter sw = new StringWriter())
        {
            using (XmlTextWriter tx = new XmlTextWriter(sw))
            {
                xmlDoc.WriteTo(tx);
                string strXmlText = sw.ToString();
                return strXmlText;
            }
        }
    }
}

এখন সহজভাবে ব্যবহার করতে:

yourXmlDoc.AsString()

এই উদাহরণটি দুটি লেখককে ডিসপোজ কল করতে ব্যর্থ।
জোয়েল মুলার

2

"\"ডিবাগার হিসাবে দেখানো হয়েছে , তবে তথ্যটি স্ট্রিংয়ে সঠিক এবং আপনার কোনও কিছুই প্রতিস্থাপনের দরকার নেই। আপনার স্ট্রিংটিকে কোনও ফাইলে ফেলে দেওয়ার চেষ্টা করুন এবং আপনি নোট করবেন যে স্ট্রিংটি সঠিক।

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