Преобразование XML в PHP - PullRequest
0 голосов
/ 22 марта 2011

Мне нужна помощь в преобразовании следующего XML в php.Кто-нибудь может мне помочь?

PUT /feeds/default/private/full/resource_id/revisions/revision_number

Host: docs.google.com
GData-Version: 3.0
Authorization: <your authorization header here>
Content-Length: 722
Content-Type: application/atom+xml

<entry xmlns="http://www.w3.org/2005/Atom" xmlns:gd='http://schemas.google.com/g/2005'xmlns:docs="http://schemas.google.com/docs/2007" gd:etag="W/"DkIBR3st7ImA9WxNbF0o."">
 <id>https://docs.google.com/feeds/id/resource_id/revisions/1</id>
 <updated>2009-08-17T04:22:10.440Z</updated>
 <app:edited xmlns:app="http://www.w3.or /2007/app">2009-08-06T03:25:07.799Z</app:edited>
 <title>Revision 1</title>
 <content type="text/html" src="https://docs.google.com/feeds/download/document/ Export?docId=doc_id&amp;revision=1"/>
 <link rel="alternate" type="text/html" href="https://docs.google.com/Doc?id=doc_id&amp;revision=1"/>
 <link rel="self" type="application/atom+xml" href="https://docs.google.com/feeds/default/private/full/resource_id/revisions/1"/>
 <author>
  <name>user</name>
  <email>user@gmail.com</email>
 </author>
 <docs:publish value="true"/>
 <docs:publishAuto value="false"/>
</entry>

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Взгляните на стандартный класс PHP simpleXML: Руководство по PHP

Приведенные здесь примеры помогут вам разобраться в этом.

0 голосов
/ 22 марта 2011

как насчет любой идеи, как сделать для этой части?

Вы хотите значение атрибута, а не тега (который является пустым).Вы можете получить доступ к атрибутам с синтаксисом массива, например:

echo $docsnode['value'];

или вы можете использовать метод attributes, например:

$attrs = $docsnode->attributes();
echo $attrs['value'];

.in; -)

поэтому я прав, если скажу, что для <docs:publish value="true"/> echo $docs['publish']

Нет, это пространство имен, которое вы должны получить в тех, кто использует *Метод 1022 * или с xpath (если они не находятся в пространстве имен документа по умолчанию, но эти узлы отсутствуют) ...

$ns = $xml->getNamespaces();
$docs = $xml->children($ns['docs']);
echo $docs->publish['value'];
echo $docs->publishAuto['value'];

ИЛИ

$docs = $xml->xpath('//docs:*');
echo $docs->publish['value'];
echo $docs->publishAuto['value'];

Таким образом, ваш код должен выглядеть примерно такэто:

$ns = $feed->getNamespaces();

foreach($feed->entries as $entry)
{
  $docs = $entry->children($ns['docs']);
  $result = $docs->publish['value'];
}
...