Настройки HTML Cyberneko, чтобы игнорировать незакодированный больше и меньше, чем символ - PullRequest
0 голосов
/ 29 марта 2011

У меня htmlcontent, который содержит больше и меньше символа. Но эти символы не кодируются как & lt; и & gt ;. Чтобы сбалансировать теги в контенте, я пропускаю контент через cyberneko html parser После анализа содержимого между значками больше и меньше символа отбрасываются. Чтобы преодолеть эту проблему, какие настройки мне нужно установить в парсере cyberneko html?

образец содержимого:

Среднее время отклика Сервер имеет решающее значение, потому что его значение 282> 0 мс
[Порог Детали: Критически, если значение> 0, Предупреждение, если значение = 0, Очистить, если значение < 0]

После разбора nekohtml


0]

Пожалуйста, помогите. Заранее спасибо

1 Ответ

0 голосов
/ 23 июня 2011

Программа ниже выдаст

Среднее время отклика сервера является критическим, поскольку его значение 282 & gt; 0 мс
[Сведения о пороге: критически важны, если значение & gt; 0, Предупреждение, если значение = 0, Очистить, если значение & lt; 0]
package test;

import java.io.StringReader;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.xerces.dom.DocumentImpl;
import org.cyberneko.html.parsers.DOMFragmentParser;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import org.xml.sax.InputSource;

public class TestHTMLDOMFragment {
    private static final String PARSE_TEXT = "<div>Average Response Time server is critical because its value 282 > 0 ms. <br>[Threshold Details : Critical if value > 0, Warning if value = 0, Clear if value < 0]</div>";

    public static void main(String[] argv) throws Exception {
        DOMFragmentParser parser = new DOMFragmentParser();

        // output the elements in lowercase, nekohtml doesn't do this by default
        parser.setProperty("http://cyberneko.org/html/properties/names/elems","lower");

        // if this is set to true (the default, you dont need to specifiy this)
        // then neko html wont and an html,head and body tags to the response.
        parser.setFeature("http://cyberneko.org/html/features/document-fragment",true);

        Document document = new DocumentImpl();
        DocumentFragment fragment = document.createDocumentFragment();

        // parse the document into a fragment
        parser.parse(new InputSource(new StringReader(PARSE_TEXT)), fragment);

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        // don't display the namespace declaration
        transformer.setOutputProperty("omit-xml-declaration", "yes");
        DOMSource source = new DOMSource(fragment);
        StreamResult result = new StreamResult(System.out);
        transformer.transform(source, result);

    }
}

Комментарии в коде выше показывают настройки парсера, которые я использовал.

Я также использовал org.cyberneko.html.parsers.DOMFragmentParser, поскольку вы можете также выполнять синтаксический анализ текста, который является просто фрагментом HTML

Я использую nekohtml 1.9.14

Если вы используете maven, вот раздел зависимостей pom.xml ...

<dependencies>
    <dependency>
        <groupId>net.sourceforge.nekohtml</groupId>
        <artifactId>nekohtml</artifactId>
        <version>1.9.14</version>
        <type>jar</type>
    </dependency>
</dependencies>
...