Я пытаюсь извлечь данные из 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.
Большое спасибо, Крис