java
  • html
  • tags
  • jsoup
  • 2013-02-15 2 views 0 likes 
    0

    С Jsoup легко подсчитывать количество присутствий определенного тега в тексте. Например, я пытаюсь увидеть, сколько раз тег привязки присутствует в данном тексте.Наличие тегов HTML с помощью Jsoup

    String content = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>. <p>An <a href='http://example.com/'><b>example</b></a> link.</p>. <p>An <a href='http://example.com/'><b>example</b></a> link.</p>. <p>An <a href='http://example.com/'><b>example</b></a> link.</p>"; 
        Document doc = Jsoup.parse(content); 
        Elements links = doc.select("a[href]"); // a with href 
        System.out.println(links.size()); 
    

    Это дает мне отсчет 4. Если у меня есть предложение, и я хочу знать, если предложение содержит какие-либо HTML-теги или нет, можно с Jsoup? Спасибо.

    ответ

    1

    Возможно, вам лучше с регулярным выражением, но если вы действительно хотите использовать JSoup, то вы можете попытаться сопоставить все эльфы, а затем вычесть 4, поскольку JSoup автоматически добавляет четыре элемента, то есть сначала корневой элемент, а затем a <html>, <head> и <body> элемент.

    Это может свободно выглядеть следующим образом:

    // attempt to count html elements in string - incorrect code, see below 
    public static int countHtmlElements(String content) { 
        Document doc = Jsoup.parse(content); 
        Elements elements = doc.select("*"); 
        return elements.size()-4; 
    } 
    

    Однако это дает неправильный результат, если текст содержит <html>, <head> или <body>; сравнить результаты:

    // gives a correct count of 2 html elements 
    System.out.println(countHtmlElements("some <b>text</b> with <i>markup</i>")); 
    // incorrectly counts 0 elements, as the body is subtracted 
    System.out.println(countHtmlElements("<body>this gives a wrong result</body>")); 
    

    Чтобы сделать эту работу, вам нужно будет проверить наличие «волшебных» тегов отдельно; поэтому я считаю, что регулярное выражение может быть проще.

    Больше неудачных попыток сделать эту работу: использование parseBodyFragment вместо parse не помогает, так как это JSoup так же санируется. То же самое, считая, что doc.select("body *"); избавляет вас от вычитания 4, но он по-прежнему дает неправильный счет, если задействован <body>. Только если у вас есть приложение, в котором вы уверены, что в проверяемых строках нет элементов <html>, <head> или <body>, он может работать под этим ограничением.

    +0

    Спасибо. doc.select ("*") работал для меня, так как мои htmls не содержат тегов, которые вы упомянули. Но да, я понимаю, что регулярное выражение было бы лучше решить это. –

    Смежные вопросы