Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

22 Апрель 2021, 23:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 3 »   Вниз
  Печать  
Автор Тема: Функция FILTERXML (ФИЛЬТР.XML) LibreOffice Calc  (Прочитано 1578 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
ost
Форумчанин
***
Offline Offline

Сообщений: 158


« Стартовое сообщение: 16 Март 2021, 18:22 »

Доброго.
Научите, пож., пользоваться сабжем.

Можно ли, используя сабж, получить следующие данные (Текст1, ИНН1 и тд.) из xml-файла (блоков <sender></sender>) может быть несколько.
Код:
  <sender>
    <name>Текст1</name>
    <inn>ИНН1</inn>
    <kpp>КПП1</kpp>
    <oktmo>ОКТМО</oktmo>
    <account>Счет1</account>
    <corrAccount>КоррСчет1</corrAccount>
    <bankName>НаименованиеБанка1</bankName>
    <bankBik>БИК1</bankBik>
    <summ>СуммаРуб</summ>
    <uin>УИН</uin>
  </sender>

Спасибо.
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 381


WWW
« Ответ #1: 16 Март 2021, 18:42 »

Можно так (XML в ячейке A1) для первого узла Sender:

=FILTERXML(A1;"/sender[1]/inn")

Второй параметр функции указывается в синтаксисе XPATH.
Записан

Владимир.
ost
Форумчанин
***
Offline Offline

Сообщений: 158


« Ответ #2: 16 Март 2021, 18:48 »

Неизменно получаю ошибку #ЗНАЧ
в А1 значение "D:\SoftMy\XpathLO\VP\05\decreeRepor_1t.xml", формула "=ФИЛЬТР.XML(A1;"//sender/inn")".
« Последнее редактирование: 16 Март 2021, 18:51 от ost » Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 381


WWW
« Ответ #3: 16 Март 2021, 18:52 »

См. вложение.
В A1 не имя файла, а текст XML из Вашего начального сообщения.

* FilterXML.ods (12.93 Кб - загружено 5 раз.)
« Последнее редактирование: 16 Март 2021, 18:54 от sokol92 » Записан

Владимир.
ost
Форумчанин
***
Offline Offline

Сообщений: 158


« Ответ #4: 16 Март 2021, 18:56 »

Оттыж... =)). А я в первый параметр ссылку на xml-файл пихаю. =)) Мдя.

Ценность функции из сабжа, таким образом, стремится к нулю.
Записан
ost
Форумчанин
***
Offline Offline

Сообщений: 158


« Ответ #5: 16 Март 2021, 19:03 »

sokol92, спасибо за ликбез.
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 381


WWW
« Ответ #6: 16 Март 2021, 19:09 »

стремится к нулю
Попробуем реанимировать. Замените путь к файлу в формуле в ячейке A1 на свой (см. вложение).

* FilterXML.ods (16.16 Кб - загружено 8 раз.)
Записан

Владимир.
ost
Форумчанин
***
Offline Offline

Сообщений: 158


« Ответ #7: 16 Март 2021, 19:23 »

Комп повесился.
Видимо, файлик оказался великоват (~9 кб)
« Последнее редактирование: 16 Март 2021, 19:24 от ost » Записан
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 3 250



« Ответ #8: 16 Март 2021, 19:30 »

Комп повесился.
как именно?! Я имею ввиду, из-за чего?
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
ost
Форумчанин
***
Offline Offline

Сообщений: 158


« Ответ #9: 16 Март 2021, 19:38 »

Запустил файл из вложения в #6.
Получил ошибку: https://yadi.sk/i/xBTM--XQcbpboA
Проигнорировав ее, заменил путь к файлу на свой. Повесил комп.
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 381


WWW
« Ответ #10: 16 Март 2021, 19:42 »

Попробуем еще раз (см. вложение).

* FilterXML.ods (10.54 Кб - загружено 7 раз.)
« Последнее редактирование: 16 Март 2021, 20:18 от sokol92 » Записан

Владимир.
ost
Форумчанин
***
Offline Offline

Сообщений: 158


« Ответ #11: 16 Март 2021, 19:45 »

Сегодня уже никак. Завтра отпишусь.
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 424


« Ответ #12: 17 Март 2021, 09:40 »

Если XML большие - то м.б. стоит их парсить на Python, в стандартную библиотеку входят два очень высокоуровневых быстрых модуля для XML. Там можно делать примерно так:
Код:
import xml.dom.minidom
dom = xml.dom.minidom.parse('G:/balance.xml') # Баланс в формате сдачи в ИФНС
dom.normalize()
stroka = dom.getElementsByTagName(\"ОбА\")[0] # вернет Запасы, НДС, ДЗ, ФинВлож из Баланса

А в мелких XML - можно просто построчно макросом  перебрать XML и дернуть нужное поле.

Если XML обновляется "на месте" и в него нужно просто иногда заглядывать - можно подключиться к нему как к TXT-файлу в БД .odb на чтение и "отражать" его содержимое в Calc. Если таких файлов много (тысячи) - они превратятся в таблицы, брать данные из них тоже можно макросом, а от XML-тегов - избавляться уже внутри.  

Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 381


WWW
« Ответ #13: 17 Март 2021, 13:31 »

LO содержит достаточно полный (и эффективный) набор "родных" средств для работы с DOM-моделями, включая, естественно, указанный в #12 метод getElementsByTagName.

Парсинг XML-файла размером 100 MB занимает 2 секунды.
« Последнее редактирование: 17 Март 2021, 13:51 от sokol92 » Записан

Владимир.
ost
Форумчанин
***
Offline Offline

Сообщений: 158


« Ответ #14: 17 Март 2021, 16:57 »

Попробуем еще раз (см. вложение).

Попробовал. Ошибок при запуске нет. Calc  состоянии https://yadi.sk/i/ZnfoHf8bScro_g
Подождал, пока процесс soffice.bin откушает 7,5 гигов оперативки. Завершил процесс. Перезагрузил машину.
Записан
Страниц: 1 2 3 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!