次のようなコードがあります。
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);
ファイルではなく文字列に含まれるXMLを解析するにはどうすればよいですか。
私は私のコードベースでこの機能を持っています、これはあなたのために働くべきです。
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);
}
この同様の質問 も参照してください。
1つの方法は、ファイルではなくInputSourceをとるバージョンの解析を使用することです。
SAX InputSourceはReaderオブジェクトから構築できます。 1つのReaderオブジェクトはStringReaderです。
なのでこんな感じ
parse(new InputSource(new StringReader(myString))) may work.
javadocs parseメソッドがオーバーロードされていることを示します。
文字列XMLを使用してStringStreamまたはInputSourceを作成したら設定してください。
文字列をInputStreamに変換してDocumentBuilderに渡す
final InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.parse(stream);
EDIT
エンコーディングに関するbendinのコメントに対する回答として、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;
}
GitHubにあるScilca XML Progessionパッケージを使うことができます。
XMLIterator xi = new VirtualXML.XMLIterator("<xml />");
XMLReader xr = new XMLReader(xi);
Document d = xr.parseDocument();