![]() |
Logparser выбор и сравнение полей из xml файлов
Вроде как немного волоку в sql запросах, но немного погуглив и почитав примеры работы с Logparseroм, решил не экспериментировать, а спросить знающих людей итак тз:
Есть xml файлы, внутри кракозябры и поля типа <FILENAME>,<SOFTWARE> ,<DOCTYPE> и мн.др. Мне нужно, чтобы Logparser выбрал значения этих полей, с привязкой к названию файла, например: 1.xml
<FILENAME>file1</FILENAME> <SOFTWARE>soft1</SOFTWARE> <DOCTYPE>type1</DOCTYPE> 2.xml
<FILENAME>file2</FILENAME> <DOCTYPE>type2</DOCTYPE> результат
FILE FILENAME SOFTWARE DOCTYPE 1___file1_____soft1_____ type1 2___file2______________type2 Пробовал выбирать ставя тип лога "XMLLOG" - выдает ошибку(не в конкретном примере, а с моими xml файлами): "В текстовом комментарии обнаружен недопустимый знак" Пробовал выбирать ставя тип лога "TEXTLINELOG" : SELECT Text FROM 'C:\\222\*.xml' where Text like '%FILENAME%' тут все отлично выбирает, но как теперь выбрать несколько разных полей, если на такие конструкции: Скрытый текст
select filename.*, soft.* from
(SELECT Filename,Text FROM 'C:\\222\*.xml' where Text like '%FILENAME%') filename , (SELECT Filename,Text FROM 'C:\\222\*.xml' where Text like '%SOFT%') soft where filename.Filename=soft.Filename(+) выбивает ошибки, в то время как sql навигатор в коммандах подобного вида ничего "странного" не видит... А еще нужно к названию файла привязаться, как-то SUBSTR по скобках ("<",">") сделать и вывести в csv. Очень надеюсь, что мою тему увидит и прокомментирует, пользователь с ником "Iska", так как я понял - он с этим парсером на "ты". Пробовал ему в ЛС написать, но там ограничения, видимо от таких назойливых как я. А так как этот парсер с урезаным sql, то при попытке что-то выбрать, возникает ощущение "игры в сапера на повышеной сложности" =). Просмотрел 2-3 страницы по поиску "Logparser", но ответа или зацепки на свои запросы так и не нашел, на "stackoverflow" и в англоязычных примерах в большинстве встречаются запросы к win'довым журналам и запросы html-страниц. =(. |
gremlintv2, выложите образцы xml-файлов (а не приведённые огрызки), упаковав их в архив.
Цитата:
Скрытый текст
Цитата:
Цитата:
Цитата:
|
Спасибо что ответили! Прикрепил файлы в топике темы - arxiv.7z. XMLLOG взял из гуя так как думал, что "он сделает все красиво", но увы =(..
|
gremlintv2, это не xml-файлы, к сожалению. В их начале идут некие бинарные «нашлёпки», как я понимаю, некие «как-бы цифровые подписи». Та же песня в конце файлов.
Что Вам нужно извлекать оттуда и в каком виде получать? |
Извлекать нужно часть названия файла и теги, и получать в виде результата:
результат.txt
KOD___________R11GA_____R11GB_____R60GB 33408606______142167____ 28433_____0 38145836______22414_______________25 PS: поле KOD(оно ключевое) получаем из названия файлов через SUBSTR(Filename,7,8) С выбором значений, точно затрудняюсь ответить, так как видимо, нужно будет "привлекать к участию" эталонный xml в котором будут все существующие xml-теги, либо каким-то образом вытягивать все уникальные теги и по ним сравнивать все файлы. Если бы удалось вытянуть все теги и сравнить с файлами, несмотря на содержимое тегов, было бы супер(так чтобы результат не основывался на четко указанных полях и парсились все теги). Знать бы синтаксис и логику работы парсера(к сожалению нет у меня опыта работы с этим инструментом), остальное я постараюсь сам дописать. PPS: как мне показалось, при задании параметра TEXTLINELOG парсер, воспринимает файлы как одну цельную строку. Спасибо! |
Может быть на PowerShell, подойдет:
Код:
dir *.xml | Foreach {"KOD__________R11GA_____R11GB_____R60GB"} { Код:
KOD__________R11GA_____R11GB_____R60GB |
Цитата:
Код:
"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT R11GA, R11GB, R60GB FROM 'C:\Мои проекты\0004\*.xml'" -i:XML -fMode:Tree -rootXPath:/DECLAR/DECLARBODY Цитата:
Цитата:
Цитата:
Цитата:
|
К сожалению по Вашему скрипту выбивает ошибку: "В текстовом комментарии обнаружен недопустимый знак." =(
Как я это вижу: 1)из папки с xml файлами выбираются все xml-теги и создается эталонный файл znach.txt с найденными тегами 2) по тегу<TIN>, а он есть во всех файлах, выбираются все значения найденных тегов и подставляются в файл znach.txt. |
Разбор, как xml на PowerShell:
Код:
dir *.xml | Foreach {"KOD__________R11GA_____R11GB_____R60GB"} { Код:
KOD__________R11GA_____R11GB_____R60GB |
Цитата:
Цитата:
Kazun, очень хорошо. Осталось таки выяснить у автора весь алгоритм. |
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Вы таки расскажете про конечный результат, про глобальную Вашу цель этих манипуляций, а? |
Цитата:
Все вполне легально, и файлы эти я тащу из открытого доступа,а не со взломанных аккаунтов. Просто работа у меня такая - что иногда приходиться искать обходные пути и делать все, пардон, "через одно место". |
Цитата:
А не подскажете новичку, каким образом вместо .PadLeft(10,";") можно просто добавить один символ справа ";" (если количество символов в строке динамическое)? |
Код:
PS (STA) > "{0};{1};{2};{3}" -f "a","b","c","d" |
Время: 01:34. |
Время: 01:34.
© OSzone.net 2001-