Что касается второго вопроса: push_ref принимает ссылку как параметр, и вы не можете иметь ссылку на static const memeber класса / struct. После вызова static_cast создается временная переменная. И ссылка на этот объект может быть передана, все работает отлично.
Или, по крайней мере, мой коллега, который разрешил это, сказал.
У меня есть эта функция в моей базе кода, это должно сработать для вас.
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);
}
также см. этот аналогичный вопрос
Один из способов - использовать версию синтаксического анализа, которая использует InputSource, а не файл
. Источник SAX InputSource может быть создан из объекта Reader. Один объект Reader является StringReader
. Так что, например,
parse(new InputSource(new StringReader(myString))) may work.
Преобразовать строку в InputStream и передать ее в DocumentBuilder
final InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.parse(stream);
Ответ EDITIn на комментарий bendin относительно кодирования, см. ответ shsteimer на этот вопрос.
javadocs показывают, что метод parse перегружен.
Создайте StringStream или InputSource, используя строковый XML, и вы должны быть установлены.
Вы можете использовать пакет Scilca XML Progession, доступный в GitHub.
XMLIterator xi = new VirtualXML.XMLIterator("<xml />");
XMLReader xr = new XMLReader(xi);
Document d = xr.parseDocument();
Я использую этот метод
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;
}