Java'da XML'yi dosya yerine Dize olarak nasıl ayrıştırabilirim?


249

Takip koduna sahibim:

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

Bir dize içinde bulunan XML'i dosya yerine ayrıştırmayı nasıl sağlayabilirim?


7
Ayrıca javax.xml.parsers.DocumentBuilder.parse(string), dizenin bir uri (korkunç ...) olduğunu varsaydığına dikkat edin
Christophe Roussy

Yanıtlar:


479

Benim kod tabanı bu işlevi var, bu sizin için çalışması gerekir.

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

bu benzer soruyu da gör


3
@ shsteimer xml dizesinde geçiyorum ve null döndürüyor. Herhangi bir istisna oluşturmaz. Ne yanlış olmalı?
sattu

@sattu: Yeni bir soru olarak göndermelisiniz. Kodunuzu görmeden söylemek gerçekten zor.
Alexander Malakhov

çok teşekkür ederim, bana kod satırları kurtardı, metne geri dönüştürüyordum ama daha iyi bir yol olduğunu biliyordum!
nkuebelbeck

3
<? XML> varsa boş bir düğüm döndürür ne yapabilirim?
Dejell

1
Doğru içe aktarma ifadesini kullandığınızdan emin olun:import org.xml.sax.InputSource;
Daniel Eisenreich

18

Bunun bir yolu, dosya yerine bir InputSource alan ayrıştırma sürümünü kullanmaktır

Bir SAX Giriş Kaynağı bir Reader nesnesinden oluşturulabilir. Bir Reader nesnesi StringReader'dır

Yani böyle bir şey

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

5

Javadocs , ayrıştırma yönteminin aşırı yüklendiğini gösterir.

Dize XML'nizi kullanarak bir StringStream veya InputSource oluşturun ve ayarlamanız gerekir.


4

Dizeyi bir InputStream öğesine dönüştürün ve DocumentBuilder'a iletin

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

DÜZENLEME
cevaben bendin 'kodlama konusunda ın yorumunu görmek shsteimer bu soruya cevabını'.


1
String.getBytes () önler çünkü StringReader tercih ederim, ama bu genellikle de çalışması gerekir .
Michael Myers

3
GetBytes () öğesini çağırdığınızda, hangi kodlamanın kullanılmasını beklersiniz? Hangi kodlamayı aldığını XML ayrıştırıcısına nasıl söylüyorsunuz? Tahmin etmesini mi bekliyorsun? Varsayılan kodlamanın UTF-8 olmadığı bir platformda olduğunuzda ne olur?
bendin

2

Bu yöntemi kullanıyorum

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

0

GitHub'da bulunan Scilca XML Progession paketini kullanabilirsiniz.

XMLIterator xi = new VirtualXML.XMLIterator("<xml />");
XMLReader xr = new XMLReader(xi);
Document d = xr.parseDocument();

0

sadece giriş

this.file = File("your xml file path")
this.document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.