Helpers - компьютеры, интернет, программирование

как запросить eXist с помощью XPath?

Я решил использовать eXist в качестве базы данных для приложения, которое я пишу на Perl и экспериментирую с ним. Проблема в том, что я сохранил документ .xml со следующей структурой

<foo-bar00>
    <perfdata datum="GigabitEthernet3_0_18">
        <cli cmd="whatsup" detail="GigabitEthernet3/0/18" find="" given="">
            <input_rate>3</input_rate>
            <output_rate>3</output_rate>
        </cli>
    </perfdata>
    <timeline>2011-5-23T11:15:33</timeline>
</foo-bar00>

и находится в коллекции "/db/LAB/foo-bar00/2011/5/23/11_15_33.xml".

Я могу успешно запросить его, например

my $xquery = 'doc("/db/LAB/foo-bar00/2011/5/23/11_15_33.xml")' ;

или $xquery может быть равно = doc("/db/LAB/foo-bar00/2011/5/23/11_15_33.xml")/foo-bar00/perfdata/cli/data(output_rate) или = doc("/db/LAB/foo-bar00/2011/5/23/11_15_33.xml")/foo-bar00/data(timeline)

my ($rc1, $set) = $eXist->executeQuery($xquery) ;
my ($rc2, $count) = $eXist->numberOfResults($set) ;
my ($rc3, @data) = $eXist->retrieveResults($set) ;
$eXist->releaseResultSet($set) ;
print Dumper(@data) ;

И результат:

$VAR1 = {
  'hitCount' => 1,
  'foo-bar00' => {
    'perfdata' => {
      'cli' => {
        'given' => '',
        'detail' => 'GigabitEthernet3/0/18',
        'input_rate' => '3',
        'cmd' => 'whatsup',
        'output_rate' => '3',
        'find' => ''
      },
      'datum' => 'GigabitEthernet3_0_18'
    },
    'timeline' => '2011-5-23T11:15:33'
  }
};

---> Учитывая, что я знаю XML-документ, из которого хочу получить информацию. ---> Учитывая, что я хочу получить информацию о временной шкале.

Когда я пишу:

my $db_xml_doc = "/db/LAB/foo-bar00/2011/5/23/11_15_33.xml" ;
my ($db_rc, $db_datum) = $eXist->queryXPath("/foo-bar00/timeline", $db_xml_doc, "") ;
print Dumper($db_datum) ;

Результат:

$VAR1 = {
  'hash' => 1717362942,
  'id' => 3,
  'results' => [
    {
      'node_id' => '1.2',
      'document' => '/db/LAB/foo-bar00/2011/5/23/11_15_33.xml'
    }
  ]
};

Вопрос: как я могу получить информацию о «временной шкале»? Кажется, что переменная «node_id» (= 1.2) может указывать на информацию «временной шкалы», но как я могу ее использовать?

Спасибо.

23.05.2011

Ответы:


1
use XML::LibXML qw( );

my $parser = XML::LibXML->new();
my $doc    = $parser->parse_file('a.xml');
my $root   = $doc->documentElement();

my ($timeline) = $root->findnodes('timeline');
if ($timeline) {
    print("Exists: ", $timeline->textContent(), "\n");
}

or

my ($timeline) = $root->findnodes('timeline/text()');
if ($timeline) {
    print("Exists: ", $timeline->getValue(), "\n");
}

Я мог бы использовать /foo-bar00/timeline вместо timeline, но не видел необходимости.

23.05.2011
  • спасибо, ikegami, но я не спрашиваю, как разобрать файл .xml, а как получить узел, который хранится в базе данных (другими словами, файла нет, и загрузить его из базы данных, чтобы разобрать это будет неэффективно) 25.05.2011
  • @ user690182, я не знал, что eXist это библиотека. Там нет ссылок на документацию или что-то еще. 25.05.2011

  • 2

    Не знаю, интересно ли вам, но вы можете либо получить документ как DOM и применить xquery к DOM, либо, что, возможно, лучше, получить только ту информацию, которую вы хотите, в запросе, который вы отправляете на сервер.

    Что-то вроде этого:

    for $p in doc("/db/LAB/foo-bar00/2011/5/23/11_15_33.xml")//output_rate
    return
        <vlaue>$p</value>
    
    07.08.2012
    Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..