Существует много информации о SO и PHP.net об использовании PHP для работы с XML, но у меня возникают проблемы с поиском всего, что показывает, как работать с пространством имен в так же, как мой XML настроен. Я вообще не знаком с XML, так что вполне возможно, что я просто не знаю, что именно ищу, когда пытаюсь сделать это.Использование PHP для анализа XML с помощью SimpleXML и проблем с пространствами имен
Это то, что он выглядит следующим образом:
<entry>
<id>16</id>
<link href="/ws/1/h/all/16/" type="application/vnd.m.h+xml" title="m_h_title" />
<published>2013-05-11T20:53:31.144957Z</published>
<updated>2013-05-27T12:20:13.963730Z</updated>
<author>
<name>Discovery</name>
</author>
<title>m_h_title</title>
<summary>
A presentation of the substance of a body of material in a condensed form or by reducing it to its main points; an abstract.
</summary>
<myns:fields>
<myns:field name="field_one" type="xs:string" value="value_one" />
<myns:field name="field_two" type="xs:string" value="value_two" />
<myns:field name="field_three" type="xs:string" value="value_three" />
<myns:field name="field_four" type="xs:string" value="value_four" />
<myns:field name="field_five" type="xs:string" value="value_five" />
</myns:fields>
</entry>
И это, насколько я сделал это ... (это было немного упрощен, прежде чем я разместил его)
$output = new SimpleXmlElement($response['data']);
foreach ($output->entry as $entry)
{
$arr['id'] = (string) $entry->id; // this is fine
$arr['summary'] = trim($entry->summary); // this is also fine
print "\$entry->fields type: " . gettype($entry->fields); // object
foreach ($entry->fields as $field) // this doesn't do anything, though
{
$name = (string) $field['name'];
$value = (string) $field['value'];
print "$name: $value <br/>";
$arr[$name] = $value;
}
}
Если я var_dump $ arr, он содержит правильные значения для идентификатора и сводки, но я не могу найти ни одной из данных в реальных полях. Я собираюсь продолжать играть с этим ... так что, если никто не ответит ни на минуту, я могу закончить обновление этого сообщения миллион раз с добавлением кода «это то, что я пробовал».
закончили с этим:
$output = new SimpleXmlElement($xml_response);
foreach ($output->entry as $entry)
{
$arr['id'] = (string) $entry->id;
$arr['summary'] = trim($entry->summary);
foreach($entry->children('myns', true) as $fields) // myns:fields
{
foreach ($fields->children('myns',true) as $field) // myns:field
{
$name = (string) $field->attributes()->name;
$value = (string) $field->attributes()->value;
$arr[$name] = $value;
}
}
}
Я не могу заставить его работать - можете ли вы его переключить так, чтобы поля с пространством имен находились под/в поле без пространства имен? например ' foo бар ' –