Java: Как экстрагировать разделенный текст из вложенного
в HTML?

StackOverflow https://stackoverflow.com//questions/24008961

Вопрос

Например:

<div>
    this is first
    <div>
        second
   </div>
</div>
.

Я работаю над обработкой натуральной языку, и я должен перевести веб-сайт (не с помощью Google Translate), для которого я должен извлечь оба предложения «Это сначала» и «вторым» отдельно, чтобы я мог заменить их другимЯзыковый текст в соответствующих делях.Если я избудую текст для сначала, он покажет «Это первый второй», и если я использую рекурсию, чтобы раскопать глубже, он будет извлекать только «вторым»

Помогите мне пожалуйста!

Редактировать

Использование метода SOTETTEXT () создаст задачу в следующем HTML-код:

<div style="top:+0.2em; font-size:95%;">
    the
    <a href="/wiki/Free_content" title="Free content">
        free
    </a>
    <a href="/wiki/Encyclopedia" title="Encyclopedia">
        encyclopedia
    </a>
    that
    <a href="/wiki/Wikipedia:Introduction" title="Wikipedia:Introduction">              
        anyone can edit
    </a>
    .
</div>
.

Это будет печать:

То, что.

Бесплатно

Энциклопедия

Любой может редактировать

Но это должно быть:

что

.

Энциклопедия

Любой может редактировать

Это было полезно?

Решение

Если я избудую текст сначала, он покажет "Это первый второй"

Используйте ownText() вместо text(), и вы получите только элемент, содержащий напрямую.

<Сильные> Вот пример:

final String html = "<div>\n"
        + "    this is first\n"
        + "    <div>\n"
        + "        second\n"
        + "   </div>\n"
        + "</div>";

Document doc = Jsoup.parse(html); // Get your Document from somewhere


Element first = doc.select("div").first(); // Select 1st element - take the first found
String firstText = first.ownText(); // Get own text

Element second = doc.select("div > div").first(); // Same as above, but with 2nd div
String secondText = second.ownText();

System.out.println("1st: " + firstText);
System.out.println("2nd: " + secondText);
.

Другие советы

Вы можете использовать анализатор XML, на любой язык, который вы используете.Вот для Java: http://www.mkyong.com/java/how-to-yread-xml-file-in-java-dom-parser/

Похоже, вы используете TextContent в Div's, чтобы извлечь контент, который приведет вас к содержимому этого элемента и все элементы посяжению. (Java: Это будет метод getTextContent на элементе)

Вместо этого осматривают детские средства (Java: метод getChildnodes на элементе). У узлов есть свойство «NodeType» (Java: getnoDetype), на котором вы можете посмотреть на работу, является ли узел текстовым узлом (Java: Node.text_node) или элемент (Java: Node.Element_node). Итак, чтобы привести пример, у вас есть дерево узлов, которое похоже на это ...

div (Element)
    this is first (TextNode)
    div (Element)
        second (TextNode)
.

Внешний div напрямую содержит только два узла - первый текст, а внутренний div. То, что внутренний Div затем содержит текст «второй».

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

Предполагая, что вы используете W3C DOM API http://docs.orcle.com/javase /7/docs/api/org/w3c/dom/node.html

 Elements divs=doc.getElementsByTag("div");

     for (Element element : divs) {
            System.out.println(element.text());

        }
.

Это должно работать, если вы используете jsououp html Parser.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top