Задать вопрос
@wyfinger

Библиотека для XML+XPath в Python?

Есть XML файл приблизительно такой структуры:
<?xml version="1.0" encoding="UTF-8"?>
<DeviceData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DIGSIXML1-4.xsd">
     <Settings>
          <FunctionGroup Name="Данные энергосистемы 1">
               <SettingPage Name="Парам ТТ/ТН">
                    <Parameter DAdr="0205" Name="Первичный номинальный ток ТТ" Type="Dec">
                         <Value>1000</Value>
                         <Comment Dimension="А" MinValue="10" MaxValue="5000" DefaultValue="1000"/>
                    </Parameter>
                    <Parameter DAdr="0206" Name="Вторичный номинальный ток ТТ" Type="Txt">
                         <Value>12922</Value>
                         <Comment Number="12921" Name="1А"/>
                         <Comment Number="12922" Name="5А"/>
                         <Comment DefaultValue="12921"/>
                    </Parameter>
                    <Parameter DAdr="0210" Name="U4 трансформатор напряжения подкл. как" Type="Txt">
                         <Value>12508</Value>
                         <Comment Number="12508" Name="Не подключен"/>
                         <Comment Number="12790" Name="Uдельта трансформатора напряжения"/>
                         <Comment DefaultValue="12508"/>
                    </Parameter>
               </SettingPage>
          </FunctionGroup>
     </Settings>
</DeviceData>


Нужна библиотека для работы с XML, поддерживающая полноценные XPath запросы, конкретно нужно такое:
//Parameter[@DAdr="0206"]/Comment[@Number=//Parameter[@DAdr="0206"]/Value/text()]/@Name


т.е. сначала ищем элемент Parameter с атрибутом @DAdr="0206", потом среди его подэлементов Comment ищем такой, у которого атрибут @Number соответствует тексту подэлемента Value того же элемента Parameter и в самом конце берем значение атрибута @Name найденного элемента.

Т.е. вложенные запросы. Например это поддерживается в плагине XML Tools для Notepad++. Ни ElementTree, ни lxml этого не могут. Эти XPath запросы приходят из конфига, поэтому не получится искать элементы последовательно в коде.

Посоветуйте пожалуйста библиотеку для Python, пытался на гитхабе чего-то найти, но большую часть даже установить с ходу не получается.
  • Вопрос задан
  • 469 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы