Получение родительского узла из XML-файла в строку в PHP

#php #xml

#php #xml

Вопрос:

Итак, я анализирую данные из XML-канала в переменные php, и все в порядке, за исключением элемента «link». Он не находится в дочернем элементе, как другие.

Ниже приведен более чистый и простой пример структуры:

 <bookstore>
  <book category="children">
    <title>Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
    <link href="http://example.com">
  </book>
  <book category="web">
    <title>Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
    <link href="http://example.com">
  </book>
</bookstore>
<bookstore>
  <book category="children">
    <title>Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
    <link href="http://example.com">
  </book>
  <book category="web">
    <title>Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
    <link href="http://example.com">
  </book>
</bookstore>
  

Как мне прочитать ссылку / href часть XML в родительском узле / bookstore / и поместить ее в строку? Похоже, что он был плохо отформатирован, но я не могу его изменить, поскольку он предоставлен третьей стороной.

Я думал, что смогу загрузить весь /bookstore/ parent и выполнить поиск по нему для ссылки и извлечь значение таким образом, но это не загрузит весь элемент bookstore.

Мой код также отлично извлекает другие дочерние теги и выполняет цикл для отображения данных в списке. Любая помощь будет оценена.

Редактировать: это ссылка на XML-файл, который я должен использовать: https://www.reddit.com/r/elderscrollsonline.xml

Комментарии:

1. В elderscrollsonline.xml ссылка закрыта <link href="http://example.com" /> Какой анализатор xml вы используете?

2. Я просто использую обычный php simplexml_load_file

Ответ №1:

Для SimpleXML — этот код:

 $rss = 'some_url_here';
$xml = simplexml_load_file($rss);
  

Для вас xml:

 foreach($xml->bookstore as $bookstore) {
foreach ($bookastore as $book)
    echo (string)$book->link['href'];
}
  

Для ссылок в https://www.reddit.com/r/elderscrollsonline.xml:

 foreach($xml->entry as $book) echo (string)$book->link['href'];
  

Комментарии:

1. Спасибо, Алекс. Это была часть link[‘href’], которую я испортил 🙂 1 Мне нужно было: // Захватить ссылку, если возможно $link = $esoreddit-> entry->link[‘href’];