Получите значение внутри & lt; title & gt; & Lt; / название & GT; [Дубликат]

Как насчет этого?

var input = new List { "a", "g", "e", "w", "p", "s", "q", "f", "x", "y", "i", "m", "c" };
var k = 3

var res = Enumerable.Range(0, (input.Count - 1) / k + 1)
                    .Select(i => input.GetRange(i * k, Math.Min(k, input.Count - i * k)))
                    .ToList();

Насколько я знаю, GetRange () является линейным по количеству принятых элементов. Так что это должно хорошо работать.

17
задан Doctor Jones 12 March 2013 в 17:05
поделиться

8 ответов

jsoup

Еще один синтаксический анализатор html Мне очень понравилось использовать jsoup . Вы можете получить все <p> элементы в 2 строках кода.

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements ps = doc.select("p");

Затем записать его в файл в еще одну строку

out.write(ps.text());  //it will append all of the p elements together in one long string

или если вы хотите их на отдельных строках вы можете перебирать элементы и записывать их отдельно.

20
ответ дан Basil Bourque 21 August 2018 в 10:25
поделиться
  • 1
    Если в документе не используются теги p (не семантическая разметка), я предполагаю, что это не сработает – sinθ 15 June 2014 в 00:36
  • 2
    @ sinθ Вопрос явно задан для элементов p. Этот ответ правильный. – Basil Bourque 26 June 2014 в 07:49
  • 3
    Спасибо @ Danny, я ♥ этот суп! – Hi I'm Frogatto 6 January 2015 в 18:02

У меня был успех с помощью TagSoup & amp; XPath для анализа HTML.

http://home.ccil.org/~cowan/XML/tagsoup/

0
ответ дан Billy Bob Bain 21 August 2018 в 10:25
поделиться

Возможно, вы используете неправильный инструмент для задания:

perl -ne "print if m|<p>| .. m|</p>|" infile.txt >outfile.txt
-2
ответ дан brianary 21 August 2018 в 10:25
поделиться

Использовать ParserCallback. Его простой класс, который включен в JDK. Он уведомляет вас каждый раз, когда найден новый тег, а затем вы можете извлечь текст тега. Простой пример:

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

public class ParserCallbackTest extends HTMLEditorKit.ParserCallback
{
    private int tabLevel = 1;
    private int line = 1;

    public void handleComment(char[] data, int pos)
    {
        displayData(new String(data));
    }

    public void handleEndOfLineString(String eol)
    {
        System.out.println( line++ );
    }

    public void handleEndTag(HTML.Tag tag, int pos)
    {
        tabLevel--;
        displayData("/" + tag);
    }

    public void handleError(String errorMsg, int pos)
    {
        displayData(pos + ":" + errorMsg);
    }

    public void handleMutableTag(HTML.Tag tag, MutableAttributeSet a, int pos)
    {
        displayData("mutable:" + tag + ": " + pos + ": " + a);
    }

    public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet a, int pos)
    {
        displayData( tag + "::" + a );
//      tabLevel++;
    }

    public void handleStartTag(HTML.Tag tag, MutableAttributeSet a, int pos)
    {
        displayData( tag + ":" + a );
        tabLevel++;
    }

    public void handleText(char[] data, int pos)
    {
        displayData( new String(data) );
    }

    private void displayData(String text)
    {
        for (int i = 0; i < tabLevel; i++)
            System.out.print("\t");

        System.out.println(text);
    }

    public static void main(String[] args)
    throws IOException
    {
        ParserCallbackTest parser = new ParserCallbackTest();

        // args[0] is the file to parse

        Reader reader = new FileReader(args[0]);
//      URLConnection conn = new URL(args[0]).openConnection();
//      Reader reader = new InputStreamReader(conn.getInputStream());

        try
        {
            new ParserDelegator().parse(reader, parser, true);
        }
        catch (IOException e)
        {
            System.out.println(e);
        }
    }
}

Итак, все, что вам нужно сделать, это установить булевский флаг, когда найден тег абзаца. Затем в методе handleText () вы извлекаете текст.

0
ответ дан camickr 21 August 2018 в 10:25
поделиться

Попробуйте это.

 public static void main( String[] args )
{
    String url = "http://en.wikipedia.org/wiki/Big_data";

    Document document;
    try {
        document = Jsoup.connect(url).get();
        Elements paragraphs = document.select("p");

        Element firstParagraph = paragraphs.first();
        Element lastParagraph = paragraphs.last();
        Element p;
        int i=1;
        p=firstParagraph;
        System.out.println("*  " +p.text());
        while (p!=lastParagraph){
            p=paragraphs.get(i);
            System.out.println("*  " +p.text());
            i++;
        } 
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}
0
ответ дан Consultant 21 August 2018 в 10:25
поделиться
  • 1
    Что это за «Элемент» и «Документ». Это какой-то сторонний парсер? Показать строки импорта тоже – James 29 August 2017 в 06:34

jericho является одним из нескольких возможных html-парсеров, которые могли бы сделать эту задачу легкой и безопасной.

9
ответ дан Gareth Davis 21 August 2018 в 10:25
поделиться

Попробуйте (если вы не хотите использовать библиотеку парсера HTML):


        FileReader fileReader = new FileReader(file);
        BufferedReader buffRd = new BufferedReader(fileReader);
        BufferedWriter out = new BufferedWriter(new FileWriter(newFile.txt));
        String s;
        int writeTo = 0;
        while ((s = br.readLine()) !=null) 
        {
                if(s.contains("<p>"))
                {
                        writeTo = 1;

                        try 
                        {
                            out.write(s);
                    } 
                        catch (IOException e) 
                        {

                    }
                }
                if(s.contains("</p>"))
                {
                        writeTo = 0;

                        try 
                        {
                            out.write(s);
                    } 
                        catch (IOException e) 
                        {

                    }
                }
                else if(writeTo==1)
                {
                        try 
                        {
                            out.write(s);
                    } 
                        catch (IOException e) 
                        {

                    }
                }
}
1
ответ дан Niall 21 August 2018 в 10:25
поделиться
  • 1
    Что произойдет, если <p> и </p> находятся в одной строке? В этом случае строка будет выписана дважды. Я думаю, это действительно зависит от ввода. – pjp 6 September 2009 в 18:13
  • 2
    Вы можете добавить какое-то состояние, чтобы узнать, вы уже выписали строку, прежде чем записывать ее снова. – pjp 6 September 2009 в 18:21

JTidy может представлять собой HTML-документ (даже некорректный) в качестве модели документа, что делает процесс извлечения содержимого тега <p> более элегантным процессом, чем ручное разглаживание исходный текст.

4
ответ дан skaffman 21 August 2018 в 10:25
поделиться
Другие вопросы по тегам:

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