Как я могу проанализировать строку HTML в Java?

Вот несколько вещей, которые я предлагаю:

  • Изменение столбец от "bigint" до "неподписанного интервала". Вы действительно когда-либо ожидаете иметь больше чем 4,2 миллиарда записей в этой таблице? В противном случае затем Вы тратите впустую пространство (и время) общедополнительное поле. Индексы MySQL более эффективны на меньших типах данных.

  • Выполнение" ОПТИМИЗИРУЕТ ТАБЛИЦУ " команда и видит, является ли Ваш запрос немного быстрее позже.

  • Вы могли бы также рассмотреть разделение Вашей таблицы согласно полю ID, особенно если более старые записи (с более низкими Значениями идентификаторов) становятся менее релевантными со временем. Разделенная таблица может часто выполнять агрегатные запросы быстрее, чем одна огромная, неразделенная таблица.

РЕДАКТИРОВАНИЕ:

Рассмотрение более тесно этой таблицы, похоже на таблицу стиля входа, где строки вставляются, но никогда не изменяются.

, Если это правда, то Вам, возможно, не понадобилась бы вся транзакционная безопасность, обеспеченная механизмом устройства хранения данных InnoDB, и Вы смогли сходить с рук переключение на MyISAM, который значительно более эффективен на агрегатных запросах.

12
задан Peter Mortensen 19 October 2009 в 17:19
поделиться

5 ответов

Я где-то нашел это (не помню где):

 public static DocumentFragment parseXml(Document doc, String fragment)
 {
    // Wrap the fragment in an arbitrary element.
    fragment = "<fragment>"+fragment+"</fragment>";
    try
    {
        // Create a DOM builder and parse the fragment.
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        Document d = factory.newDocumentBuilder().parse(
                new InputSource(new StringReader(fragment)));

        // Import the nodes of the new document into doc so that they
        // will be compatible with doc.
        Node node = doc.importNode(d.getDocumentElement(), true);

        // Create the document fragment node to hold the new nodes.
        DocumentFragment docfrag = doc.createDocumentFragment();

        // Move the nodes into the fragment.
        while (node.hasChildNodes())
        {
            docfrag.appendChild(node.removeChild(node.getFirstChild()));
        }
        // Return the fragment.
        return docfrag;
    }
    catch (SAXException e)
    {
        // A parsing error occurred; the XML input is not valid.
    }
    catch (ParserConfigurationException e)
    {
    }
    catch (IOException e)
    {
    }
    return null;
}
1
ответ дан 2 December 2019 в 04:53
поделиться

Вот способ:

import java.io.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;

public class HtmlParseDemo {
   public static void main(String [] args) throws Exception {
       Reader reader = new StringReader("<table><tr><td>Hello</td><td>World!</td></tr></table>");
       HTMLEditorKit.Parser parser = new ParserDelegator();
       parser.parse(reader, new HTMLTableParser(), true);
       reader.close();
   }
}

class HTMLTableParser extends HTMLEditorKit.ParserCallback {

    private boolean encounteredATableRow = false;

    public void handleText(char[] data, int pos) {
        if(encounteredATableRow) System.out.println(new String(data));
    }

    public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
        if(t == HTML.Tag.TR) encounteredATableRow = true;
    }

    public void handleEndTag(HTML.Tag t, int pos) {
        if(t == HTML.Tag.TR) encounteredATableRow = false;
    }
}
9
ответ дан 2 December 2019 в 04:53
поделиться

вы можете использовать HTML Parser, Это инструмент с открытым исходным кодом, его можно найти на SourceForge

.
6
ответ дан 2 December 2019 в 04:53
поделиться

Вы можете использовать Swing:

Как вы используете Возможности обработки HTML, которые встроен в Java? Вы можете не знать этого Swing содержит все классы необходимо для синтаксического анализа HTML. Джефф Хитон покажет вам, как это сделать.

3
ответ дан 2 December 2019 в 04:53
поделиться

Я использовал Jericho HTML Parser , это OSS, обнаруживает (прощает) плохо отформатированные теги и является легким

3
ответ дан 2 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: