Как сделать запрос XPath внутри подузла - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь извлечь данные из XML-документа.Все узлы в документе XML имеют пространства имен, поэтому я использую PHP XPath, который поддерживает узлы с пространствами имен (например, имена элементов с: в них), которые будут выглядеть следующим образом: <person:address> ... </person:address>

Документ XML имеетсписок серий данных, каждый из которых содержит метаданные, а также значения данных наблюдения.

Я регистрирую все пространства имен со следующим синтаксисом (который работает): $ XPath-> registerNameSpace ('NameSpace', 'http://www.something.com/subfolder');

Затем я получаю все родительские узлы, которыесодержит информацию ряда данных:

$DataSeriesNodes = $XPath->query('//NameSpace:DataSeries');

Затем я перебираю родительские узлы:

foreach ( $DataSeriesNodes as $Index=> $Node ) ...

Задача состоит в том, какзапросить каждый из $ Node. Из моего исследования я понимаю, что вы можете добавить узел для запроса в качестве второго параметра в XPath-> query (), чтобы избежать выполнения запроса в корне XML. Я пробовал это:

$Data = $XPath->query('NS2:Info', $DataSeriesNodes[$Index]);

Но это не работает для меня, он все еще запрашивает корень XML не только подэлемент $ DataSeriesNodes [$ Index].

Другие методы, которые я пришелчерез не будет работать из-за использования пространств имен (например, -> getElementByTagName не работает на узлах с двоеточием). Я ценю, что вы могли бы написать отдельные XPath-> query () для каждого из подэлементов, ноЯ скорее хотел бы перебрать родительские узлы и target соответствующие подузлы для информации в цикле, поскольку она более гибкая (существует несколько документов XML, и каждый может иметь различное количество рядов данных).

Возможно ли это с помощью XPath или любого другого метода для запросаподузел в цикле?Я не привязан к XPath, но метод должен иметь возможность иметь дело с пространствами имен / элементами с: в них.Я потратил 2 дня на изучение и попытки включить все, что я мог найти в StackExchange.

Большое спасибо, Крис

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...