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

Как запросить результат запроса в Saxon xquery

Я пытаюсь сделать базовую вещь в Saxon HE 9.7 с помощью xquery. У меня есть xquery, который возвращает набор элементов. Затем я хочу запросить каждый элемент отдельно. Но я не могу понять, как сделать запрос только для этого элемента. Я думал, что setContextItem() поможет, но это не работает.

Я создал простой пример, иллюстрирующий мою проблему. Я перебираю <element>, а затем хочу получить <name> для каждого элемента. Но мой запрос ничего не возвращает, потому что на самом деле он запрашивает полный xml, а не только элемент. Если я изменю внутренний запрос на //name, он вернет все теги имен в документе.

Данные файла/example.xml:

<root>
    <element>
        <name>1</name>
    </element>
    <element>
        <name>2</name>
    </element>
</root>

Java-код:

public static void main(String[] args) throws SaxonApiException
{
    Processor proc = new Processor(false);
    XPathCompiler xpath = proc.newXPathCompiler();
    DocumentBuilder builder = proc.newDocumentBuilder();
    XdmNode rootNode = builder.build(new File("data/example.xml"));
    String xquery = "/root/element";
    XPathSelector selector = xpath.compile(xquery).load();
    selector.setContextItem(rootNode);
    for (XdmItem item : selector)
    {
        xquery = "/element/name";
        XPathSelector selector2 = xpath.compile(xquery).load();
        selector2.setContextItem(item);
        System.out.println("item=" + item);
        if (selector2.iterator().hasNext())
            System.out.println("name=" + selector2.iterator().next());
        else
            System.out.println("Not found");
    }
}

Моя зависимость Maven:

<dependency>
    <groupId>net.sf.saxon</groupId>
    <artifactId>Saxon-HE</artifactId>
    <version>9.7.0-4</version>
</dependency>

Результат:

item=<element>
        <name>1</name>
    </element>
Not found
item=<element>
        <name>2</name>
    </element>
Not found
01.04.2016

Ответы:


1

В XPath / в начале всегда ссылается на узел документа. Если вы хотите, чтобы ваш XPath (тот, что внутри цикла) учитывал элемент контекста, попробуйте начать его с точки (.):

xquery = "./name";

Или просто полностью удалите / * :

xquery = "name";

*) это будет работать для вашего случая, потому что child:: является осью по умолчанию, которая будет использоваться, если ни одна из них не указана явно

01.04.2016
Новые материалы

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

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

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

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

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

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

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