Навигация по HTML документу – примеры Java
В этой статье вы узнаете, как перемещаться по HTML-документу и выполнять детальную проверку его элементов с помощью API Aspose.HTML for Java. Вы можете легко создать собственное приложение для анализа, сбора или извлечения информации из HTML-документов, поскольку наш API предоставляет мощный набор инструментов для навигации по документу с помощью CSS Selector, XPath Query или пользовательских фильтров.
HTML-навигация
Существует множество способов создания HTML-навигации. В следующем списке показан самый простой способ доступа ко всем элементам DOM используя класс Node:
| Property | Description |
|---|---|
| FirstChild | Accessing this attribute of an element must return a reference to the first child node. |
| LastChild | Accessing this attribute of an element must return a reference to the last child node |
| NextSibling | Accessing this attribute of an element must return a reference to the sibling node of that element which most immediately follows that element. |
| PreviousSibling | Accessing this attribute of an element must return a reference to the sibling node of that element which most immediately precedes that element. |
| ChildNodes | Returns a list that contains all children of that element. |
Используя упомянутые свойства, вы можете перемещаться по HTML-документу следующим образом:
1// Navigate the HTML DOM using Java
2
3// Prepare HTML code
4String html_code = "<span>Hello,</span> <span>World!</span>";
5
6// Initialize a document from the prepared code
7HTMLDocument document = new HTMLDocument(html_code, ".");
8
9// Get the reference to the first child (first <span>) of the document body
10Element element = document.getBody().getFirstElementChild();
11System.out.println(element.getTextContent());
12// @output: Hello,
13
14// Get the reference to the second <span> element
15element = element.getNextElementSibling();
16System.out.println(element.getTextContent());
17// @output: World!Для более сложных сценариев, когда вам нужно найти узел по определенному шаблону (например, получить список заголовков, ссылок и т. д.), вы можете использовать специализированный TreeWalker или NodeIterator объект с собственной реализацией Filter.
В следующем примере показано, как реализовать собственный NodeFilter для пропуска всех элементов, кроме изображений:
1// Create custom NodeFilter to accept only image elements in Java
2
3public static class OnlyImageFilter extends NodeFilter {
4 @Override
5 public short acceptNode(Node n) {
6 // The current filter skips all elements, except IMG elements
7 return "img".equals(n.getLocalName())
8 ? FILTER_ACCEPT
9 : FILTER_SKIP;
10 }
11}После реализации фильтра вы можете использовать HTML-навигацию следующим образом:
1// Filter HTML elements using TreeWalker and custom NodeFilter in Aspose.HTML for Java
2
3// Prepare HTML code
4String code = " < p > Hello, </p >\n" +
5 " <img src = 'image1.png' >\n" +
6 " <img src = 'image2.png' >\n" +
7 " <p > World ! </p >\n";
8
9// Initialize a document based on the prepared code
10HTMLDocument document = new HTMLDocument(code, ".");
11
12// To start HTML navigation, we need to create an instance of TreeWalker
13// The specified parameters mean that it starts walking from the root of the document, iterating all nodes, and using our custom implementation of the filter
14ITreeWalker iterator = document.createTreeWalker(document, NodeFilter.SHOW_ALL, new NodeFilterUsageExample.OnlyImageFilter());
15// Use
16while (iterator.nextNode() != null) {
17 // Since we are using our own filter, the current node will always be an instance of the HTMLImageElement
18 // So, we don't need the additional validations here
19 HTMLImageElement image = (HTMLImageElement) iterator.getCurrentNode();
20
21 System.out.println(image.getSrc());
22 // @output: image1.png
23 // @output: image2.png
24}XPath
Альтернативой HTML-навигации является XML Path Language. Синтаксис выражений XPath довольно прост и, что более важно, его легко читать и поддерживать.
В следующем примере показано, как использовать запросы XPath в Java API Aspose.HTML:
1// Select HTML elements using XPath expression in Aspose.HTML for Java
2
3// Prepare HTML code
4String code = "< div class='happy' >\n" +
5 " <div >\n" +
6 " <span > Hello! </span >\n" +
7 " </div >\n" +
8 " </div >\n" +
9 " <p class='happy' >\n" +
10 " <span > World! </span >\n" +
11 " </p >\n";
12
13// Initialize a document based on the prepared code
14HTMLDocument document = new HTMLDocument(code, ".");
15
16// Here, we evaluate the XPath expression where we select all child <span> elements from elements whose 'class' attribute equals to 'happy'
17IXPathResult result = document.evaluate("//*[@class='happy']//span",
18 document,
19 null,
20 XPathResultType.Any,
21 null
22);
23
24// Iterate over the resulted nodes
25for (Node node; (node = result.iterateNext()) != null; ) {
26 System.out.println(node.getTextContent());
27 // @output: Hello!
28 // @output: World!
29}CSS-селектор
Наряду с HTML Navigation и XPath вы можете использовать CSS Selector API, который также поддерживается нашей библиотекой. Этот API предназначен для создания шаблона поиска для сопоставления элементов в дереве документа на основе синтаксиса CSS Selectors.
1// Select HTML elements using CSS selector querySelectorAll method in Aspose.HTML for Java
2
3// Prepare HTML code
4String code = "< div class='happy' >\n" +
5 " <div >\n" +
6 " <span > Hello, </span >\n" +
7 " </div >\n" +
8 " </div >\n" +
9 " <p class='happy' >\n" +
10 " <span > World ! </span >\n" +
11 " </p >\n";
12
13// Initialize a document based on the prepared code
14HTMLDocument document = new HTMLDocument(code, ".");
15
16// Here, we create a CSS Selector that extracts all elements whose 'class' attribute equals to 'happy' and their child SPAN elements
17NodeList elements = document.querySelectorAll(".happy span");
18
19// Iterate over the resulted list of elements
20elements.forEach(element -> {
21 System.out.println(((HTMLElement) element).getInnerHTML());
22 // @output: Hello,
23 // @output: World!
24});Aspose.HTML предлагает Извлечение ключевых слов – инструмент для извлечения ключевых слов из веб-страниц, обычного текста или файлов, работающий на основе искусственного интеллекта. Это приложение поможет вам быстро определить ключевые темы и тенденции для оптимизации сайта, анализа конкурентов или обобщения больших документов. Просто вставьте текст или URL-адрес, выберите настройки и нажмите “Extract”, чтобы получить точные, значимые ключевые слова за считанные секунды. Идеально подходит для улучшения видимости в поисковых системах, таргетирования контента и принятия решений на основе данных.
