web-dev-qa-db-ja.com

Javaでは、XMLをファイルではなく文字列としてどのように解析するのですか?

次のようなコードがあります。

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

ファイルではなく文字列に含まれるXMLを解析するにはどうすればよいですか。

234
Dewayne

私は私のコードベースでこの機能を持っています、これはあなたのために働くべきです。

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

この同様の質問 も参照してください。

455
shsteimer

1つの方法は、ファイルではなくInputSourceをとるバージョンの解析を使用することです。

SAX InputSourceはReaderオブジェクトから構築できます。 1つのReaderオブジェクトはStringReaderです。

なのでこんな感じ

parse(new InputSource(new StringReader(myString))) may work. 
16
Uri

javadocs parseメソッドがオーバーロードされていることを示します。

文字列XMLを使用してStringStreamまたはInputSourceを作成したら設定してください。

5
duffymo

文字列をInputStreamに変換してDocumentBuilderに渡す

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

EDIT
エンコーディングに関するbendinのコメントに対する回答として、shsteimerのこの質問に対する回答を参照してください。

4
Akbar ibrahim

私はこの方法を使っています

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();
0
Sukant Kumar