জাভাতে, আমি কীভাবে এক্সএমএলকে কোনও ফাইলের পরিবর্তে একটি স্ট্রিং হিসাবে পার্স করব?


249

আমার কাছে নিম্নলিখিত কোড রয়েছে:

DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);

আমি কীভাবে এটি একটি ফাইলের পরিবর্তে একটি স্ট্রিংয়ের মধ্যে থাকা এক্সএমএলকে বিশ্লেষণ করতে পারি?


7
এছাড়াও মনে রাখবেন যে javax.xml.parsers.DocumentBuilder.parse(string)স্ট্রিংটি একটি ইউরি (ভয়ানক ...)
ক্রিস্টোফ রাউসি

উত্তর:


479

আমার কোড বেসে আমার এই ফাংশনটি রয়েছে, এটি আপনার পক্ষে কাজ করা উচিত।

public static Document loadXMLFromString(String xml) throws Exception
{
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    InputSource is = new InputSource(new StringReader(xml));
    return builder.parse(is);
}

আরো দেখুন এই একই প্রশ্ন


3
@ শেসটাইমার আমি এক্সএমএল স্ট্রিংয়ে যাচ্ছি এবং এটি শূন্য ফিরে আসছে। এটি কোনও ব্যতিক্রম ছুঁড়ে না। কী ভুল হতে হবে?
সাতটু

@ সত্তু: আপনার এটি একটি নতুন প্রশ্ন হিসাবে পোস্ট করা উচিত। আপনার কোড না দেখে বলা সত্যিই শক্ত hard
আলেকজান্ডার মালাখভ

অনেক ধন্যবাদ, আমাকে কোডের গুচ্ছ লাইনগুলি বাঁচিয়েছে, আমি এটিকে আবার পাঠ্যে রূপান্তর করছিলাম তবে আমি জানতাম এর চেয়ে আরও ভাল উপায় ছিল!
nkuebelbeck

3
যদি আমার <? XML> থাকে তবে এটি খালি নোড ফেরায় আমি কী করতে পারি?
ডিজেল

1
আপনি সঠিক আমদানির বিবৃতিটি ব্যবহার করেছেন কিনা তা পরীক্ষা করে দেখুন:import org.xml.sax.InputSource;
ড্যানিয়েল আইজেনরিচ

18

একটি উপায় পার্সের সংস্করণটি ব্যবহার করা যা কোনও ফাইলের পরিবর্তে ইনপুটসোর্স নেয়

একটি রিয়েল অবজেক্ট থেকে একটি SAX ইনপুটসোর্স তৈরি করা যেতে পারে। একটি রিডার অবজেক্ট হ'ল স্ট্রিংরেডার

তাই কিছু

parse(new InputSource(new StringReader(myString))) may work. 

5

জাভাডোকগুলি দেখায় যে পার্স পদ্ধতিটি খুব বেশি লোড হয়েছে।

আপনার স্ট্রিং এক্সএমএল ব্যবহার করে একটি স্ট্রিংস্ট্রিম বা ইনপুটসোর্স তৈরি করুন এবং আপনার সেট করা উচিত।


4

স্ট্রিংটিকে ইনপুট স্ট্রিমে রূপান্তর করুন এবং এটি ডকুমেন্টবিল্ডারে প্রেরণ করুন

final InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.parse(stream);

সম্পাদনা
জবাবে bendin 'এনকোডিং সংক্রান্ত এর মন্তব্যে দেখুন shsteimer এই প্রশ্নের গুলি উত্তর'।


1
আমি স্ট্রিংরেডার পছন্দ করতাম কারণ এটি স্ট্রিং.জেটবাইটস () এড়ায়, তবে এটি সাধারণত কাজ করা উচিত।
মাইকেল মায়ার্স

3
আপনি যখন getBytes () কল করেন, আপনি কোন এনকোডিংটি ব্যবহার করবেন বলে আশা করছেন? আপনি এক্সএমএল পার্সারকে কীভাবে বলছেন যা এটি এনকোডিং করছে? আপনি কি এটি অনুমান করবেন বলে আশা করেন? আপনি যখন এমন প্ল্যাটফর্মে থাকবেন যেখানে ডিফল্ট এনকোডিংটি ইউটিএফ -8 নয়?
বেন্ডিন

2

আমি এই পদ্ধতিটি ব্যবহার করছি

public Document parseXmlFromString(String xmlString){
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    InputStream inputStream = new    ByteArrayInputStream(xmlString.getBytes());
    org.w3c.dom.Document document = builder.parse(inputStream);
    return document;
}

0

আপনি গিটহাব-এ উপলব্ধ স্কিলকা এক্সএমএল প্রেজেসন প্যাকেজটি ব্যবহার করতে পারেন।

XMLIterator xi = new VirtualXML.XMLIterator("<xml />");
XMLReader xr = new XMLReader(xi);
Document d = xr.parseDocument();

0

শুধু ইনপুট

this.file = File("your xml file path")
this.document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.