2012-03-02 1 views
1

Итак, у нас есть 1500 xhtml-страниц, которые позволяют сказать 100 подпапок/myfolder. Я хочу, чтобы найти злые созвездияXpath найти файлы для окон? XML-парсер для поиска файлов в окнах

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

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

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

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

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

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

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

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

+1

Какая бирка зла? Почему ' kev

+0

вопрос обновлен – Toskan

ответ

0

Если вы готовы написать свою собственную программу 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 мощи быть лучшим местом для этого вопроса ...

1

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

  • найти все файлы XML в текущем г irectory
  • список всех файлов 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 version) here.

+0

Очень приятно. Я не знал, что вы можете делать такие вещи с 'bash' –

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

  • Нет связанных вопросов^_^