Вы, скорее всего, хотели бы использовать потоковый парсер, например TagSoup, который реализует API SAX2. Так как он не создает дерево DOM, он принимает одинаковый объем памяти независимо от размера исходного документа. Если вы еще не занимались SAX, вот немного tutorial.
Чтобы просто убрать текст (вставка точки вместо обоих открывающим и закрывающим тегами), вы можете использовать следующий фрагмент кода:
package com.example;
import org.ccil.cowan.tagsoup.Parser;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import java.io.IOException;
import java.io.InputStream;
public class MyHandler extends DefaultHandler {
final static String SEPARATOR = ".";
StringBuilder builder;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
builder.append(SEPARATOR);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
builder.append(SEPARATOR);
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
builder.append(ch, start, length);
}
public String cleanHtml(InputStream inputStream) {
builder = new StringBuilder();
Parser parser = new Parser();
parser.setContentHandler(this);
try {
parser.parse(new InputSource(inputStream));
} catch (IOException | SAXException e) {
e.printStackTrace();
}
return builder.toString();
}
}
Не могли бы вы привести пример того, что вы хотите достичь? – alkis