2016-09-02 3 views
1

Рассмотрим следующий HTML-код, как и в файле example.htmlПолучить определенный элемент с xmllint

<!DOCTYPE html> 
<head> 
<meta charset="utf-8"> 

<body> 
<div class="container"> 
    <h1> 
    <a href="/"> 
    <img src="/images/image.png"/> 
    </a> 
    </h1> 
    <ul> 
    <li><a href="/" >link1<br /><span>content</span></a></li> 
    <li><a href="/folder" >link2<br /><span>more contend</span></a></li> 
    </ul> 
</div><!-- .container --> 
<div class="container"> 
    <ul class="disc"> 
    <li><strong>no interest 1</strong></li> 
    <li><strong>no interest 2</strong></li> 
    <li><strong>no interest 3</strong></li> 
    <li>keyword1: <strong>unkown_content</strong></li> 
    <li>keyword2: <strong>unkown_content</strong></li> 
    </ul> 
</div><!-- .container --> 
<div class="container"> 
    <ul class="disc"> 
    <li><a href="/folder1">not interested</a></li> 
    <li><a href="/folder2">not interested</a></li> 
    <li><a href="/folder3">not interested</a></li> 
    <li>keyword1: <strong>unkown_content</strong></li> 
    <li>keyword2: <strong>unkown_content</strong></li> 
    </ul> 
</div><!-- .container --> 
</body> 
</html> 

Я хотел бы получить unkown_content после второго keyword1. Я пытался

xmllint --html --xpath "//li[text()='keyword1: ']" example.html 2>/dev/null 
<li>keyword1: <strong>unkown_content</strong></li><li>keyword1: <strong>unkown_content</strong></li> 

Как вы можете видеть, это возвращает оба узла с keyword1. Как получить содержание последнего появления?

ответ

2

Пробег: xmllint --html --xpath "(//li[text()='keyword1: '])[last()]" example.html 2>/dev/null.

Обратите внимание на добавление [last()] - оно указывает на последнее вхождение //li[text()='keyword1: ']. Скобки вокруг //li[text()='keyword1: '] также необходимы, так как [last()] применяется к набору узлов.

+0

Я пробовал первый, и он не работал. Второй, с фигурными скобками, сделал трюк. Моя последняя команда - «xmllint --html --xpath» (// li [text() = 'keyword1:']) [last()]/strong/text() ". Это получает контент, в котором я нуждаюсь. Благодарю. – nautical

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