В 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();