जावा में, मैं फ़ाइल के बजाय XML को एक स्ट्रिंग के रूप में कैसे पार्स करूं?


249

मेरे पास निम्नलिखित कोड हैं:

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

फ़ाइल के बजाय स्ट्रिंग के भीतर निहित XML को पार्स करने के लिए मैं इसे कैसे प्राप्त कर सकता हूं?


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
@shsteimer मैं xml स्ट्रिंग में गुजर रहा हूं और यह अशक्त लौट रहा है। यह कोई अपवाद नहीं फेंकता है। क्या गलत होना चाहिए?
सत्तू

@ सत्तू: आपको इसे एक नए प्रश्न के रूप में पोस्ट करना चाहिए। आपका कोड देखे बिना बताना वास्तव में कठिन है।
अलेक्जेंडर मालाखोव

बहुत धन्यवाद, मुझे कोड की गुच्छा लाइनों को बचाया, मैं इसे वापस पाठ में परिवर्तित कर रहा था लेकिन मुझे पता था कि एक बेहतर तरीका था!
nkuebelbeck

3
अगर मेरे पास <? XML> यह एक खाली नोड लौटाता है तो मैं क्या कर सकता हूं?
देजेल

1
जाँच करें कि आप सही आयात विवरण का उपयोग करते हैं:import org.xml.sax.InputSource;
डैनियल ईसेनरिच

18

एक तरीका पार्स के संस्करण का उपयोग करना है जो एक फ़ाइल के बजाय एक इनपुट स्रोत लेता है

रीडर ऑब्जेक्ट से SAX InputSource का निर्माण किया जा सकता है। एक रीडर ऑब्जेक्ट StringReader है

तो कुछ ऐसा है

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

5

javadocs बताते हैं कि पार्स विधि अतिभारित है।

अपने स्ट्रिंग XML का उपयोग करके एक StringStream या InputSource बनाएँ और आपको सेट किया जाना चाहिए।


4

स्ट्रिंग को एक इनपुटस्ट्रीम में बदलें और इसे डॉक्यूमेंटब्यूस्टल पास करें

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

संपादित
के जवाब में bendin 'एन्कोडिंग के बारे में टिप्पणी, देख shsteimer इस सवाल का जवाब रों'।


1
मैं स्ट्रिंगर पसंद करूंगा क्योंकि यह String.getBytes () से बचा जाता है, लेकिन यह आमतौर पर भी काम करना चाहिए ।
माइकल मायर्स

3
जब आप getBytes () कहते हैं, तो आप किस एन्कोडिंग का उपयोग करने की उम्मीद कर रहे हैं? आप XML पार्सर को कैसे बता रहे हैं कि यह कौन सा एन्कोडिंग है? क्या आप यह अनुमान लगाने की उम्मीद करते हैं? जब आप एक ऐसे प्लेटफ़ॉर्म पर होते हैं, जहां डिफ़ॉल्ट एन्कोडिंग UTF-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

आप GitHub पर उपलब्ध Scilca XML Progession पैकेज का उपयोग कर सकते हैं।

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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.