Есть что-то вроде «CSS-селектор» или XPath grep? - PullRequest
15 голосов
/ 07 сентября 2011

Мне нужно найти все места в группе файлов HTML, которые лежат в следующей структуре (CSS):

div.a ul.b

или XPath:

//div[@class="a"]//div[@class="b"]

grep не помогает мне здесь. Существует ли инструмент командной строки, который возвращает все файлы (и, возможно, все места в них), которые соответствуют этому критерию? То есть, это возвращает имена файлов, если файл соответствует определенной структуре HTML или XML.

Ответы [ 3 ]

19 голосов
/ 07 января 2013

Попробуйте:

  1. Установить http://www.w3.org/Tools/HTML-XML-utils/.
  2. Сохранить веб-страницу (назовите ее filename.html).
  3. Выполнить: hxnormalize -l 240 -x filename.html | hxselect -s '\n' -c "label.black"

Где "label.black" - это селектор CSS, который однозначно идентифицирует имя HTML-элемента.Напишите вспомогательный скрипт с именем cssgrep:

#!/bin/bash

# Ignore errors, write the results to standard output.
hxnormalize -l 240 -x $1 2>/dev/null | hxselect -s '\n' -c "$2"

После этого вы сможете выполнить:

cssgrep filename.html "label.black"

Это сгенерирует содержимое для всех элементов HTML label класса black,Смотрите также: https://superuser.com/a/529024/9067

8 голосов
/ 05 июня 2012

Я создал инструмент командной строки с Node JS, который делает именно это. Вы вводите селектор CSS, и он будет искать во всех файлах HTML в каталоге и сообщать вам, какие файлы соответствуют этому селектору.

Вам нужно будет установить Element Finder cd в каталог, который вы хотите найти, а затем запустить:

elfinder -s "div.a ul.b"

Подробнее см. http://keegan.st/2012/06/03/find-in-files-with-css-selectors/

0 голосов
/ 07 сентября 2011

За ответ Ната здесь:

Как разобрать XML в Bash?

Command-line tools that can be called from shell scripts include:

4xpath - command-line wrapper around Python's 4Suite package
XMLStarlet
xpath - command-line wrapper around Perl's XPath library
...