#php #xml #parsing
#php #xml #синтаксический анализ
Вопрос:
Как я могу проанализировать XML-данные с помощью PHP? Я хочу получить содержимое только элемента с именем
<profile xmlns="mysite.com">
<confirmationNumber>128686132</confirmationNumber>
<merchantRefNum>123456</merchantRefNum>
<customerEmail>test@test.com</customerEmail>
</profile>
Я пытался использовать этот код
$sxe = new SimpleXMLElement($decodedMessage);
echo $sxe->getName() . "n";
foreach ($sxe->children() as $child)
{
echo $child->getName() . "n";
}
Но я не знаю, как выбрать конкретный элемент.
Ответ №1:
Вам не нужны методы обхода SimpleXML. Просто используйте simplexml_load_string()
, если у вас уже есть это в одном:
$xml = simplexml_load_string($decodedMessage);
Тогда доступ к содержимому так прост, как:
print $xml->customerEmail;
Ответ №2:
Вы можете попробовать функцию simplexml_load_file() и использовать XML в качестве объекта. Или преобразовать в массив с помощью приведения.
Ответ №3:
Вам следует взглянуть на xpath.
Ответ №4:
Один из самых простых способов справиться с этим — поискать в Google функцию под названием xml2array, поскольку с ассоциативными массивами в PHP работать намного проще, чем с XML.
Ответ №5:
вы можете попробовать это.
$xml = simplexml_load_file($filePath) or die ("Unable to load XML file!");
//Access XML Data
echo "confirmation Number: " . $xml->confirmationNumber;
echo "merchant Ref Num: " . $xml->confirmationNumber;
echo "customer Email: " . $xml->customerEmail;
Ответ №6:
Если вы хотите найти этот элемент в документе большего размера, вы могли бы использовать XPath.
Например, для XML
<some>
<hierarchy>
<profile>
<etc>et cetera</etc>
</profile>
</hierarchy>
</some>
вы можете просто выполнить $sxe->xpath('//profile')
, который вернет массив всех элементов профиля повсюду в документе (в виде SXES, которые вы можете затем обработать). Если есть только один элемент profile, то все готово, но если их много, вам понадобится более конкретный XPath.