В Java, как я могу разобрать XML как строку вместо файла? - PullRequest
234 голосов
/ 18 февраля 2009

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

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

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

Ответы [ 6 ]

455 голосов
/ 18 февраля 2009

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

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

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

16 голосов
/ 18 февраля 2009

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

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

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

parse(new InputSource(new StringReader(myString))) may work. 
5 голосов
/ 18 февраля 2009

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

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

4 голосов
/ 18 февраля 2009

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

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

EDIT
В ответ на комментарий bendin относительно кодировки см. Ответ shsteimer на этот вопрос.

2 голосов
/ 07 сентября 2016

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

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 голосов
/ 10 октября 2016

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

XMLIterator xi = new VirtualXML.XMLIterator("<xml />");
XMLReader xr = new XMLReader(xi);
Document d = xr.parseDocument();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...