it-swarm.com.ru

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

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

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

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

234
Dewayne

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

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

также смотрите это похожий вопрос

455
shsteimer

Одним из способов является использование версии синтаксического анализа, которая принимает InputSource, а не файл

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

Так что-то вроде

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

javadocs показывает, что метод разбора перегружен.

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

5
duffymo

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

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

РЕДАКТИРОВАТЬ
В ответ на комментарий bendin относительно кодировки см. Ответ shsteimer на этот вопрос.

4
Akbar ibrahim

Я использую этот метод

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;
}
2
Yasir Shabbir Choudhary

Вы можете использовать пакет Scilca XML Progession, доступный на GitHub.

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