Penguraian XML PHP ODATA dengan SimpleXMLElement

Saya memiliki yang berikut ini dikembalikan sebagai XML dari sumber:

<content type="application/xml">
  <m:properties>
    <d:ID>30</d:ID>
    <d:Name></d:Name>
    <d:ProfileImageUrl>default.png</d:ProfileImageUrl>
    <d:ThumbnailUrl>default.png</d:ThumbnailUrl>
    <d:FavoriteCount m:type="Edm.Int64">0</d:FavoriteCount>
    <d:ViewCount m:type="Edm.Int64">12030</d:ViewCount>
    <d:LastMonthViewCount m:type="Edm.Int64">1104</d:LastMonthViewCount>
    <d:LastWeekViewCount m:type="Edm.Int64">250</d:LastWeekViewCount>
    <d:LastDayViewCount m:type="Edm.Int64">21</d:LastDayViewCount>
    <d:CreationDate m:type="Edm.DateTime">2011-03-28T13:46:54.227</d:CreationDate>
    <d:Enabled m:type="Edm.Boolean">true</d:Enabled>
    <d:UrlSafeName>t-boz</d:UrlSafeName>
    <d:LastDayFavoriteCount m:type="Edm.Int64">0</d:LastDayFavoriteCount>
    <d:LastWeekFavoriteCount m:type="Edm.Int64">0</d:LastWeekFavoriteCount>
    <d:LastMonthFavoriteCount m:type="Edm.Int64">0</d:LastMonthFavoriteCount>
    <d:IsOnTour m:type="Edm.Boolean">false</d:IsOnTour>
    <d:TodayRank m:type="Edm.Int32">6272</d:TodayRank>
    <d:WeekRank m:type="Edm.Int32">6851</d:WeekRank>
    <d:MonthRank m:type="Edm.Int32">6915</d:MonthRank>
    <d:AllTimeRank m:type="Edm.Int32">7973</d:AllTimeRank>
  </m:properties>
</content>

Saya mengambilnya melalui file_get_contents lalu membuatnya melalui SIMPLEXMLElement. Namun saya tidak dapat mengakses bidang konten->properti (mis. ID, Nama, ProfileImageUrl, dll). Yang saya lihat dari SIMPLEXMLElement adalah sebagai berikut:

[content] => SimpleXMLElement Object ( [@attributes] => Array ( [type] => application/xml ) )

Adakah pemikiran tentang bagaimana saya mendapatkan data ini?

Terima kasih!


person Nikon0266    schedule 29.02.2012    source sumber
comment
XML Anda tidak valid, awalan namespace m dan d perlu ditentukan dalam dokumen.   -  person salathe    schedule 01.03.2012
comment
Ini XML yang sangat cerdik. Ia menggunakan awalan namespace pada elemennya tetapi tidak mengikat awalan namespace tersebut.   -  person Francis Avila    schedule 01.03.2012
comment
Umpannya memiliki ini di atas.. Maaf saya mengecualikannya sebelumnya. ‹?xml versi=1.0 pengkodean=utf-8 standalone=yes?› ‹feed xml:base=odata .vevo.com/v1/Catalog xmlns:d=schemas.microsoft. com/ado/2007/08/dataservices xmlns:m=skema .microsoft.com/ado/2007/08/dataservices/metadata xmlns=w3.org/ 2005/Atom  -  person Nikon0266    schedule 01.03.2012


Jawaban (1)


Mengakses elemen dengan namespace mudah dilakukan dengan SimpleXML, Anda cukup memberi tahu metode children() namespace mana yang harus dicari.

Contoh sangat mendasar akan terlihat seperti:

$xml = <<<XML
<content type="application/xml" xmlns:m="urn:m" xmlns:d="urn:d">
  <m:properties>
    <d:ID>30</d:ID>
    <d:ProfileImageUrl>default.png</d:ProfileImageUrl>
  </m:properties>
</content>
XML;

$content      = simplexml_load_string($xml);

// Quick way
// $properties = $content->children('m', TRUE)->properties->children('d', TRUE);
// echo $properties->ProfileImageUrl;

// Step by step
$m_elements   = $content->children('m', TRUE);
$m_properties = $m_elements->properties;
$d_elements   = $m_properties->children('d', TRUE);
echo $d_elements->ProfileImageUrl;
person salathe    schedule 29.02.2012