В Java, как я могу разобрать XML как строку вместо файла?

У меня есть следующий код:

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

Как я могу заставить его анализировать XML, содержащийся в строке, а не в файле?

6 ответов


У меня есть эта функция в моем коде, это должно работать для вас.

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

см. Также этот же вопрос


один из способов-использовать версию parse, которая принимает InputSource, а не файл

SAX InputSource может быть построен из объекта Reader. Одним из объектов Reader является StringReader

что-то вроде

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

javadocs показать, что метод parse перегружен.

создайте StringStream или InputSource с помощью строки XML, и вы должны быть установлены.


преобразуйте строку в InputStream и передайте ее DocumentBuilder

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

редактировать
в ответ Бендинкомментарий относительно кодировки, см. 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, доступный в GitHub.

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