ฉันมีรหัสต่อไปนี้:
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);
ฉันจะให้มันแยกวิเคราะห์ XML ที่มีอยู่ใน String แทนที่จะเป็นไฟล์ได้อย่างไร
ฉันมีรหัสต่อไปนี้:
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);
ฉันจะให้มันแยกวิเคราะห์ XML ที่มีอยู่ใน String แทนที่จะเป็นไฟล์ได้อย่างไร
คำตอบ:
ฉันมีฟังก์ชั่นนี้ในรหัสฐานของฉันมันควรจะทำงานให้คุณ
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);
}
import org.xml.sax.InputSource;
วิธีหนึ่งคือการใช้รุ่นของการแยกวิเคราะห์ที่ใช้ InputSource แทนที่จะเป็นไฟล์
SAX InputSource สามารถสร้างขึ้นจากวัตถุ Reader วัตถุตัวอ่านหนึ่งคือ StringReader
ดังนั้นสิ่งที่ชอบ
parse(new InputSource(new StringReader(myString))) may work.
javadocsแสดงให้เห็นว่าวิธีการแยกวิเคราะห์เป็นมากเกินไป
สร้าง StringStream หรือ InputSource โดยใช้สตริง XML ของคุณและคุณควรตั้งค่า
แปลงสตริงเป็น InputStream และส่งผ่านไปยัง DocumentBuilder
final InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.parse(stream);
แก้ไข
เพื่อตอบสนองต่อความคิดเห็นของbendinเกี่ยวกับการเข้ารหัสดูคำตอบของshsteimerสำหรับคำถามนี้
ฉันใช้วิธีนี้
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;
}
คุณสามารถใช้แพ็คเกจ Scilca XML Progession ได้ที่ GitHub
XMLIterator xi = new VirtualXML.XMLIterator("<xml />");
XMLReader xr = new XMLReader(xi);
Document d = xr.parseDocument();
ใส่เพียง
this.file = File("your xml file path")
this.document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file)
javax.xml.parsers.DocumentBuilder.parse(string)
สมมติว่าสตริงนั้นเป็น uri (แย่มาก ... )