PHP XML xlink: атрибуты href [дубликаты]

0

У меня возникли проблемы с чтением атрибутов из API Spreadshirt с помощью SimpleXML. Я не могу захватить атрибут xlink: href из ресурсов, который мне нужен, поскольку он не отображается в полученных данных. Похоже, уметь хватать все остальное.

Это XML, который я читаю:

 <articles xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://api.spreadshirt.net" xlink:href="http://api.spreadshirt.net/api/v1/shops/800323/articles?fullData=true" offset="0" limit="50" count="16" sortField="default" sortOrder="default">
    <article isDuplicate="false" xlink:href="http://api.spreadshirt.net/api/v1/shops/800323/articles/100402428" id="100402428">
      <name>Hammer T-Shirt</name>
      <price>
        <vatExcluded>13.33</vatExcluded>
        <vatIncluded>16.00</vatIncluded>
        <vat>20.00</vat>
        <currency xlink:href="http://api.spreadshirt.net/api/v1/currencies/2" id="2"/>
      </price>
      <resources>
        <resource mediaType="png" type="preview" xlink:href="http://image.spreadshirt.net/image-server/v1/products/125642560/views/1"/>
      </resources>
    </article>
 </atricles>

Это данные, возвращаемые с SimpleXML:

SimpleXMLElement Object
(
[@attributes] => Array
    (
        [isDuplicate] => false
        [id] => 27368595
    )

[name] => Hammer Boxers
[price] => SimpleXMLElement Object
    (
        [vatExcluded] => 10.00
        [vatIncluded] => 12.00
        [vat] => 20.00
        [currency] => SimpleXMLElement Object
            (
                [@attributes] => Array
                    (
                        [id] => 2
                    )

            )

    )

[resources] => SimpleXMLElement Object
    (
        [resource] => SimpleXMLElement Object
            (
                [@attributes] => Array
                    (
                        [mediaType] => png
                        [type] => preview
                    )

            )

    )

)

У кого-нибудь есть идеи? Я в тупике.

  • 0
    Вы не отображаете данные, которые возвращаются. Чтобы отобразить данные, используйте метод ->asXML('php://output') для объекта SimpleXMLElement , не используйте print_r или var_dump , эти функции скрывают данные любого объекта.
Теги:
simplexml

1 ответ

2
Лучший ответ

isDuplicate и id находятся в том же пространстве имен, что и элемент.

Элемент href находится в пространстве имен http://www.w3.org/1999/xlink, как указано префиксом xlink, зарегистрированным в корневом элементе <articles>.

Чтобы получить доступ ко всем элементам пространства имен, вызовите $element->attributes('http://www.w3.org/1999/xlink').

Идея состоит в том, что корневой элемент мог бы вместо этого сказать xmlns:foobar="http://www.w3.org/1999/xlink", и каждый <article> имел бы атрибуты foobar:href="..." и код выше все равно будет работать, потому что связанный префикс является лишь способом улучшения удобочитаемости. Что такое URL-адрес пространства имен, а не его префикс.

  • 0
    Круто, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню