Xpath найти файлы для Windows? парсер xml для поиска файлов в windows - PullRequest
1 голос
/ 02 марта 2012

Итак, у нас есть 1500 xhtml страниц, скажем, 100 вложенных папок в / myfolder.Я хочу найти злые созвездия

<goodTag>
 ....
 <evilTag/>
 ....
 <evilTag/>
 ....
</goodTag>

В моем текущем случае разрешено иметь только

<goodTag>
....
<evilTag/>
...
</goodTag>

, а не 2 злых тега в пределах хорошего тега.Это всего лишь пример, хотя.Иногда я должен искать что-то вроде

<outter>
....
<someTag someAttribute="iDoEvil" />
...
</outter>

. Я уже некоторое время просматриваю и не могу найти инструмент, который бы помог мне в этом.Какие бесплатные программные продукты / решения с открытым исходным кодом доступны в Windows?

Что такое файлы xhtml?в основном это веб-страницы, созданные для JSF.Мы используем наши собственные теги и продолжаем вносить в них изменения и, следовательно, должны внимательно следить за плохим созвездием, о котором не думали

Я в основном спрашиваю, потому что в итоге я сделал это с помощью регулярных выражений, что заставляет людей здесь сходить с ума.

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Это решение bash:

  • найти все xml-файлы в текущем каталоге
  • перечислить все xml-файлы, которые содержат <someTag someAttribute="iDoEvil" />

for i in `find . -name '*.xml'`
do
    if xmlstarlet sel -H -t -m '//someTag[@someAttribute="iDoEvil"]' -v @someAttribute "$i" >/dev/null
    then
        echo "$i"
    fi
done

Примечание: Я не пытался написать DOS скрипт в Windows, но идея та же.
Вы можете скачать xmlstarlet (версия для Windows) здесь .

0 голосов
/ 02 марта 2012

Если вы хотите написать свою собственную программу на Java, вы можете использовать комбинацию apache commons IO и jOOX :

// Use apache commons to recurse into your file structure:
for (File file : FileUtils.listFiles(yourDir, new String[] { ".xml" }, true)) {

    // Use jOOX to parse the file and match the "bad" combination with XPath:
    if ($(file).xpath("//goodTag[count(.//evilTag) > 1]").size() > 0) {
        System.out.println("Match : " + file);
    }
}

Примечание.если вы не готовы писать свою собственную программу, возможно, SuperUser может быть лучшим сайтом для этого вопроса ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...