XML Browser — навигация по XML-файлам

Здесь можно обсудить ваш любимый плагин.
User avatar
Dworkin
Posts: 4
Joined: Wed 30 Aug, 2017 11:01

XML Browser — навигация по XML-файлам

Post by Dworkin »

Latest post of the previous page:

HaRT wrote:
Wed 30 Aug, 2017 23:00
Однако при входе в файл по Enter/CtrlPgDn ошибка не возникает (workaround!).
А можно подробнее, что такой за хитрая комбинация?

User avatar
HaRT
Moderator
Posts: 9443
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 105 times
Been thanked: 222 times

XML Browser — навигация по XML-файлам

Post by HaRT »

Dworkin wrote:
Thu 31 Aug, 2017 08:39
что такой за хитрая комбинация?
Обычный вход в папку/архив. Вы бы хоть базовую документацию по Фару изучили что ли. (В том моём сообщении ‘/’ означает «или», если что.)
Фар есть инструмент, а не нянька. © 2009 DrKnS

buniak_a_h
Posts: 1877
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 120 times
Been thanked: 167 times
Contact:

XML Browser — навигация по XML-файлам

Post by buniak_a_h »

Помогите пожалуйста.
Файл для илюстрации проблем:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <FictionBook>
  3.  <description>
  4.   <title-info>
  5.    <author>
  6.     <first-name>Андрей</first-name>
  7.     <middle-name>Олегович</middle-name>
  8.     <last-name>Белянин</last-name>
  9.    </author>
  10.    <book-title>Ржавый меч царя Гороха</book-title>
  11.   </title-info>
  12.  </description>
  13. </FictionBook>
В описании плагина (в части, посвящённой XPath-запросам) написано:
можно использовать XPath-выражения, возвращающие "скалярное" значение. Такое значение будет выводиться в окне сообщения.

В командной строке набираю:
xml:Test.xml:/FictionBook/description/title-info/author//text()
Получаю три узла (что правильно)
Но мне нужно получить только последний (last-name). Пытаюсь "уточнить" запрос:
xml:Test.xml:/FictionBook/description/title-info/author/last-name//text()
Получаю пустую панель (хотя ожидается панель с одним элементом). Я наделся, что именно это и называется "скалярным" запросом, НО... Никакого «окна сообщения» не выводится.
  1. Я чего-то не понимаю в работе с XPath? или это - ошибка в плагине?
  2. Как получить значение атрибута узла (в данном случае - #text)?
  3. Есть ли какая-то возможность получать данные (текст узла, лбо значение атрибута узла), используя этот плагин (возможно, поместить значение в клипборд)? В частности, на форуме упоминался синтаксис запроса из командной строки xml:dup:... - где об этом можно прочитать?
  4. Имеется (если нет - планируется ли) вызовы плагина из макросов через Plugin.Call
Last edited by buniak_a_h on Thu 01 Mar, 2018 00:02, edited 2 times in total.

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

XML Browser — навигация по XML-файлам

Post by fml2 »

Я не очень знаком с плагином, но немного знаю XPath. Не пробовали двойной слэш перед text() заменить на одинарный? Кроме того, text(), возможно, вообще не нужен, т.к. значением узла (по умолчанию) является его текстовое содержимое.

buniak_a_h
Posts: 1877
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 120 times
Been thanked: 167 times
Contact:

XML Browser — навигация по XML-файлам

Post by buniak_a_h »

fml2 wrote:
Thu 01 Mar, 2018 00:15
Я не очень знаком с плагином, но немного знаю XPath. Не пробовали двойной слэш перед text() заменить на одинарный?
Пробовал. Результат тот же.
fml2 wrote:
Thu 01 Mar, 2018 00:15
Кроме того, text(), возможно, вообще не нужен, т.к. значением узла (по умолчанию) является его текстовое содержимое.
Без text() происходит просто переход на узел /FictionBook/description/title-info/author/last-name .
Поясню задачу. Мне надо в макросе получить текст узла для дальнейшей обработки (например, составления каталога книг). Вложенный файл, кстати, на самом желе является урезанным вариантов FB2-файла. Поэтому хотелось бы как можно меньше задействовать "панельные" и редакторные возможности ФАРа . А без text() придётся организовывать поиск элемента (свойства) #text, а для получения значения - заходить в описание (Ctrl+Z), отмечать (Ctrl+A) и брать в буфер. В принципе, возможно. Но геморрой какой-то кажущийся лишним Т.е. у плагина наверняка есть возможность получить текст узла (ну, раз показывает!). Просто я не нашёл (возможно, нету) интерфейса для возвращения этого значения.

fps
Posts: 215
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 17 times
Been thanked: 6 times

XML Browser — навигация по XML-файлам

Post by fps »

xml:Test.xml:/FictionBook/description/title-info/author/last-name//text()
Получаю пустую панель (хотя ожидается панель с одним элементом).
xml:Test.xml:/FictionBook/description/title-info/author/last-name
затем
lua:msgbox("",Panel.Item(0,2,11))

buniak_a_h
Posts: 1877
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 120 times
Been thanked: 167 times
Contact:

XML Browser — навигация по XML-файлам

Post by buniak_a_h »

fps wrote:
Thu 01 Mar, 2018 11:48
xml:Test.xml:/FictionBook/description/title-info/author/last-name
затем
lua:msgbox("",Panel.Item(0,2,11))
Ну, почти... нельзя быть уверенным, что там нет других пропертей; соответственно, надо позиционироваться на #text:


Остальное (Panel.Item(...)) я и так уже нашёл. Просто открытие ПАНЕЛИ плагина тащит за собой сохранение/восстановление предыдущей панели (отметки, положение, видимость...). А теперь представьте, что на панели перед вызовом макроса был установлен фильтр! Сбрасывать, восстанавливать...
Т.е. либо надо открывать панель плагина в новой панели (не знаю, как создать, а затем удалить панель именно как объект), либо получать немаленький геморрой с сохранение/очисткой/восстановлением параметров панели.
Возможно, есть методы типа Panel.SaveStatus/Panel.RestStatus, но я о них не знаю
(кстати, полезные были бы методы...).

buniak_a_h
Posts: 1877
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 120 times
Been thanked: 167 times
Contact:

XML Browser — навигация по XML-файлам

Post by buniak_a_h »

Ещё "особенность" плагина, очень похожая на ошибку:
1.
В командной строке пишем:
xml:Test.xml
В открывшейся панели плагина жмём CtrlJ и вводим XPath-выражение:
/FictionBook/description/title-info/author/last-name
В результате открывается узел /FictionBook/description/title-info/author, в нем - только один подузел last-name (как фильтр).
2.
Делаем, судя по хелпу, аналогичные действия, но "в один клик" (т.е. сразу в командной строке вводим префикс, через ":" имя файла и опять через ":" XPath-выражение):
xml:Test.xml:/FictionBook/description/title-info/author/last-name
Ожидается, естественно, тот же результат, что и при первой последовательности действий. УВЫ! "Захожу" в узел last-name и вижу (в виде файлов) проперти и собственно #text. Т.е. как будто делал то, что в первом случае, но потом спустился в панели до first-name и зашёл в него.
Ну и "родственная" особенность: если в XPath примеров 1. и 2. добавить в конец //text(), то при вводе XPath в диалоге откроется узел first-name с фильтром #text, а при вводе XPath в командной строке откроется ПУСТОЙ узел first-name.
Всё же эта особенность очень смахивает на ошибку...

fps
Posts: 215
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 17 times
Been thanked: 6 times

XML Browser — навигация по XML-файлам

Post by fps »

yms wrote:
Fri 15 Aug, 2014 11:14
4. Идея насчет JSON и мне приходила в голову, но это, наверно, будет другой плагин. С YAML дела не имел, но всё возможно...
Последнее время всё чаще приходится иметь дело с файлами в формате YAML. Похоже, формат набирает популярность.
Плагин для работы с ним аналогично json и xml был бы очень полезен.

EGez
Posts: 145
Joined: Thu 04 Oct, 2012 13:53
Location: Hamburg, DE
Has thanked: 2 times
Been thanked: 2 times

XML Browser — навигация по XML-файлам

Post by EGez »

Здравствуйте.

yms, очень не хватает возможности работать с большими файлами. Уже от 0.8-1.2ГБ не открываются, 16ГБ уже не хватает... :(

Post Reply

Return to “Обсуждение плагинов”