[wlx] xmltab - просмотр XML файлов

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Destiny
Сообщения: 340
Зарегистрирован: Вт дек 15, 2015 18:22

Сообщение Destiny »

little-brother писал(а):лучше использовать XMLReview-плагин
У него свои ошибки-недоделки есть)) которые не позволяют его использовать. Да и темы-обсуждения тут на форуме у него нет. Некуда писать пожелания)))
Уж лучше мы ваш, мы лучший мир ДОстроим.. а затем!!! будем использовать тока ваш плагин)))
little-brother
Сообщения: 205
Зарегистрирован: Ср сен 29, 2021 16:45

Сообщение little-brother »

темы-обсуждения тут на форуме у него нет. Некуда писать пожелания)))
Да, он оказался мудрее меня! :lol: :lol: :lol:

Судя по вот этой странице плагина, писать можно olegvsk@outlook.com.
Для нетабличных данных этот плагин лучше моего - он быстрее, мощнее и красивее. И если третье теоретически можно исправить, то сделать быстрее у меня не получится - данные в стандартный компонент Windows для отображения дерева добавляются очень медленно. И по фунционалу тоже не догнать.
Destiny
Сообщения: 340
Зарегистрирован: Вт дек 15, 2015 18:22

Сообщение Destiny »

little-brother писал(а):он быстрее, мощнее и красивее.
и все же не открывает все те файлы, что уже умеет открывать ваш)))
так что я лучше посижу подожду - авось случайно как-нить реализация работы с XPath все же просто появится тут))
little-brother
Сообщения: 205
Зарегистрирован: Ср сен 29, 2021 16:45

Сообщение little-brother »

В смысле появится? Она уже есть! :lol:
Destiny
Сообщения: 340
Зарегистрирован: Вт дек 15, 2015 18:22

Сообщение Destiny »

Кстати, насчет табличного представления в правой части)))
КАК это смешно не звучит, но опять-таки неплохая часть моих файлов под это определение подойдет с одним лишь отличием. Файлы содержат табличные данные, НО! не имеют первичного корня. Нет первого и единственного тега)) который должен охватывать все строки

Код: Выделить всё

    <Y>a</Y> <-- ROWS: 1/2
    <Y>b</Y> <-- ROWS: 2/2
Т.е. нет тегов <X></X> вокруг.
В связи с чем плагин-то работает шикарно - он-таки показывает все табличные данные, но не в виде таблицы((( Потому что не хватает этого верхнеуровневого тега <X>.
В связи с чем предложение. Равно как есть в контекстном меню возможность смотреть в данный момент времени на фильтры, или не смотреть на них. Добавить пункт меню "Root tag all contents" - Охватить корневым тегом все содержимое. По его активации в дерево парсинга принудительно вставляется первым тегом <X> а последним тегом вставляется </X>. Ну или какой-то другой красивый тег))
В итоге мы получаем красивое табличное представление, что и задумывалось для таких случаев!

Добавлено спустя 30 минут:
little-brother писал(а):В смысле появится? Она уже есть!
Даааааа, вас явно окружают нимфы и музы программирования)))

НО есть нюанс. XPath есть и для тегов и для атрибутов тегов))

Код: Выделить всё

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>
чтобы достать атрибут lang для первой книги я пишу:
/book[1]/title/@lang
А у вас сейчас есть возможность получить XPath ТОЛЬКО для узла - для тега title! Хотя и для значения тоже должна существовать возможность скопировать XPath ;) В нашем случае это будет: /book[1]/title/text()

ну что - фиксим?
little-brother
Сообщения: 205
Зарегистрирован: Ср сен 29, 2021 16:45

Сообщение little-brother »

С этим есть проблема: допустим XML имеет вид

Код: Выделить всё

<X>
     123
     <y>aaa</y>
     <y>bbb</y>
     <z>ccc</z>
</X>
Строки с тегом y вроде как можно отобразить таблично, а вот текстовый узел 123 и z выбиваются из этого. Сейчас плагин проверяет, что все дочерние узлы X имеют одинаковый тег, и, если все ок, то показывается таблица (TABLE), иначе показывается содержимое узла по аттрибутам (SINGLE).

Насколько я понимаю вы предлагаете добавить настройку, чтобы можно было игнорировать 123 и ccc, Однако, что делать если y-узлов столько же сколько и z? А могут же быть еще другие.

Можно конечно добавить в дереве выпадающее меню ignore/hide для узла, т.е. получив подобный XML, вам нужно будет выставить руками ignore для 123 и z-узла, после чего данные будут выведены как таблица. Однако, если X-имеет достаточно много узлов и например 10-20 неподходящих, то выставление ignore уже может стать утомительным, да и не очевидно это как то работать будет.

Хотя можно добавить для узла в выпадающем меню "Показать только такие же" и соответственно для X отфильтровать только узлы с тегом текущего.
Destiny
Сообщения: 340
Зарегистрирован: Вт дек 15, 2015 18:22

Сообщение Destiny »

little-brother писал(а):Насколько я понимаю вы предлагаете добавить настройку, чтобы можно было игнорировать 123 и ccc, Однако, что делать если y-узлов столько же сколько и z? А могут же быть еще другие.
нет - нет! никаких доп.игнорирований!
именно просто жесткое добавление Охватывающего тега Х вокруг всего и вся.
Как говорится - под присмотром пользователя и под его ответственность.
Запоминать даже положение этой опции не надо.
На каждое открытие XML - она не активна, и лишь если я выбрал ее - то охватывающий тег принудительно добавляется в дерево парсинга.

Добавлено спустя 4 минуты:

И кстати, я сейчас проверил поведение при добавленном субтеге, отличающемся от остальных - аналог вашего Z, при массовом наличии тегов Y...
А и ничего - нормально и верно плагин все отобразил в табличном виде))) И все Y и потом этот Z. Всё красиво!!!

Добавлено спустя 2 минуты:
little-brother писал(а):Хотя можно добавить для узла в выпадающем меню "Показать только такие же" и соответственно для X отфильтровать только узлы с тегом текущего.
кстати - ОООЧЕНЬ прикольная опция. Совсем о таком даже не подумалось в первой. Но сейчас - даже очень интересной кажется)))
little-brother
Сообщения: 205
Зарегистрирован: Ср сен 29, 2021 16:45

Сообщение little-brother »

А как может быть XML без корневого тега то?

Код: Выделить всё

<X></X>
<X></X>
Это же полностью невалидная конструкция. Хотя чего это я спрашиваю :lol: :lol: :lol:
вас явно окружают нимфы и музы программирования))
Это просто у кого то слишком много свободного времени и пора искать работу. Хотя с текущим положением дел, когда Сбер и Яндекс просели и могут начать увольнять погроммистов, рынок может и просесть :(
Destiny
Сообщения: 340
Зарегистрирован: Вт дек 15, 2015 18:22

Сообщение Destiny »

little-brother писал(а):Это же полностью невалидная конструкция.
только в рамках конкретно одного взятого файла.
НО т.к. его использование идет в другом файле, куда его содержимое включается, то в ИТОГЕ весь xml представлен валидно. С корневыми тегами.
Но я-то файлы просматриваю напрямую - БЕЗ этого использования... Мне эта опция весьма нужна. Чтобы имитировать это включение/обхват.
Destiny
Сообщения: 340
Зарегистрирован: Вт дек 15, 2015 18:22

Сообщение Destiny »

Но про охватывающий тег - я даже склонен думать, что делать это (ваша миссия, если вы возьметесь за её выполнение, мистер Хант),
можно и на потом отложить. Более главное дело - это подправить XPath для атрибутов узлов и их значений.
чтоб работали/копировались:
/book[1]/title/@lang
и
/book[1]/title/text()
для, к примеру,

Код: Выделить всё

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>
little-brother
Сообщения: 205
Зарегистрирован: Ср сен 29, 2021 16:45

Сообщение little-brother »

охватывающий тег
Это строчек 10 кода.

А вот с XPath проблема есть: строки в таблице и дерево сейчас в плагине никак не связаны, т.е. сказать что отображает текущая строка, чтобы получить XML-узел, а по нему XPath, уже нельзя. Думаю, что можно сделать.
Destiny
Сообщения: 340
Зарегистрирован: Вт дек 15, 2015 18:22

Сообщение Destiny »

little-brother писал(а):строки в таблице и дерево сейчас в плагине никак не связаны, т.е. сказать что отображает текущая строка, чтобы получить XML-узел, а по нему XPath, уже нельзя
а разве у узла нет поля UserDATA, ну или как там оно может звучать?
Чтобы заносить свою инфу, кроме того, что узел должен отобразить как текстовую видимую информацию.
И тогда записывать в это поле текущий XPath этого узла на моменте генерации самого дерева. И тогда когда надо его скопировать - то просто get_UserData для выбранного узла и все. И это сработает для ситуации, когда мы по факту фокусом на таблице висим. Просто у дерева спросить текущий выделенный узел, а у него опять просто get_UserData.
little-brother
Сообщения: 205
Зарегистрирован: Ср сен 29, 2021 16:45

Сообщение little-brother »

У дерева есть, он используется - там хранится ссылка на привязанный XML-узел. А вот у строк таблицы уже нет. Так как используется виртуальный режим отображения (для скорости), то реальных строк нет следовательно Userdata для каждой из них.

Ссылка на XML-узел в данном случае нужна именно для строки, т.к. два вида отображения - как содержимое узла SINGLE (тут можно взять и из текущего узла дерева), и список дочерних узлов TABLE (тут уже желательно иметь ссылку). Пробовал брать узел из дерева и отсчитывать по строкам для него, но это все криво, т.к. строки могут быть пересортированы и отфильтрованы. Так что думаю как сделать.
Destiny
Сообщения: 340
Зарегистрирован: Вт дек 15, 2015 18:22

Сообщение Destiny »

Я может что совсем не понимаю, но разве не всё очень просто)))
тогда просто не бить меня, просьба... а вот мысля моя такова:
Изображение
Когда выделен узел в дереве (как сейчас на скрине) - то XPath вроде как уже работает и дает верную строку.
/LIST_OF_PERSONS/DATA[1]/PASSPORT/SERIJA

А когда я тапну на элемент в таблице - то по идее к существующему пути, который уже есть для выделенного узла дерева, надо добавить текст из таблицы по логике:
если начинается на @ - то добавить как есть:
/LIST_OF_PERSONS/DATA[1]/PASSPORT/SERIJA/@lang
если начинается на # - то добавить фиксированную строку:
/LIST_OF_PERSONS/DATA[1]/PASSPORT/SERIJA/text()

и как бы вроде всё...
little-brother
Сообщения: 205
Зарегистрирован: Ср сен 29, 2021 16:45

Сообщение little-brother »

Почти верно, но это режим SINGLE, отображение содержимого тега (его атрибутов и значений прямых потомков), т.е. когда по текущему узлу в дереве можно получить ссылку на XML-узел.
Проблема, когда отображается не содержимое узла, а список прямых потомков, как таблица (режим TABLE). Сейчас связи между потомком и представляющей его строкой - нет. Вот думаю как увязать, чтобы не слишком путано было.

Update #1: В общем и целом сделялъ. Осталось баги выловить.

Update #2: Вот альфа - https://disk.yandex.ru/d/Yt8pwJKmkh6SYA
Добавлено:
* XPath для строк таблицы
* Автоматическое добавление корня документа, если его нет
* Отображение соседних элементов имеющий тег, как у текущего в дереве. Т.е. если были теги x, x, x, z, x, то будут отобраны только x и показаны в таблице с 4-мя строками.
С XPath вроде все.
Текстовый узел всегда имеет /text() (без указания номера), CDATA и комментарии кривые, но мне пока лень.
Будет еще доработка по работе с ссылками в ячейках.
Последний раз редактировалось little-brother Вт мар 01, 2022 21:29, всего редактировалось 3 раза.
Ответить