Вопрос:

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

java xml string file parsing

246413 просмотра

6 ответа

1767 Репутация автора

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

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

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

Автор: Dewayne Источник Размещён: 18.02.2009 05:56

Ответы (6)


5 плюса

278969 Репутация автора

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

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

Автор: duffymo Размещён: 18.02.2009 05:58

16 плюса

68833 Репутация автора

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

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

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

parse(new InputSource(new StringReader(myString))) may work. 
Автор: Uri Размещён: 18.02.2009 05:59

4 плюса

2945 Репутация автора

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

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

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

Автор: Akbar ibrahim Размещён: 18.02.2009 06:02

470 плюса

17019 Репутация автора

Решение

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

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

также увидеть этот похожий вопрос

Автор: shsteimer Размещён: 18.02.2009 06:10

2 плюса

1294 Репутация автора

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

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;
}
Автор: Yasir Shabbir Choudhary Размещён: 07.09.2016 09:48

0 плюса

189 Репутация автора

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

XMLIterator xi = new VirtualXML.XMLIterator("<xml />");
XMLReader xr = new XMLReader(xi);
Document d = xr.parseDocument();
Автор: Shukant Pal Размещён: 10.10.2016 07:25
Вопросы из категории :
32x32