У меня есть XML-документ, который дает мне адреса.Вот выдержка:
<ezi:orderaddresses>
<ezi:orderaddress>
<ezi:addresstype>billing</ezi:addresstype>
<ezi:name>Jason Fonseca</ezi:name>
<ezi:companyname>Cyber</ezi:companyname>
<ezi:address1>8 springstein</ezi:address1>
<ezi:division>NT</ezi:division>
<ezi:postalcode>34245</ezi:postalcode>
<ezi:countrycode>AU</ezi:countrycode>
<ezi:email>jason@bigcreative.com.au</ezi:email>
<ezi:phone>89549854</ezi:phone>
<ezi:mobilephone>984590598</ezi:mobilephone>
</ezi:orderaddress>
<ezi:orderaddress>
<ezi:addresstype>shipping</ezi:addresstype>
<ezi:name>Jason Fonseca</ezi:name>
<ezi:companyname>Cyber</ezi:companyname>
<ezi:address1>8 springstein</ezi:address1>
<ezi:division>NT</ezi:division>
<ezi:postalcode>34245</ezi:postalcode>
<ezi:countrycode>AU</ezi:countrycode>
<ezi:email>jason@bigcreative.com.au</ezi:email>
<ezi:phone>89549854</ezi:phone>
</ezi:orderaddress>
</ezi:orderaddresses>
В дополнение к вышеуказанному формату двух тегов "orderaddress", также может быть один, например:
<ezi:orderaddresses>
<ezi:orderaddress>
<ezi:addresstype>billing</ezi:addresstype>
<ezi:name>Jason Fonseca</ezi:name>
<ezi:companyname>Cyber</ezi:companyname>
<ezi:address1>8 springstein</ezi:address1>
<ezi:division>NT</ezi:division>
<ezi:postalcode>34245</ezi:postalcode>
<ezi:countrycode>AU</ezi:countrycode>
<ezi:email>jason@bigcreative.com.au</ezi:email>
<ezi:phone>89549854</ezi:phone>
<ezi:mobilephone>984590598</ezi:mobilephone>
</ezi:orderaddress>
</ezi:orderaddresses>
Что я нахожу, что когдаиспользуя простой xml для интерпретации этого, в первом случае я получаю следующее:
[orderaddresses] => SimpleXMLElement Object
(
[orderaddress] => Array
(
[0] => SimpleXMLElement Object
(
[addresstype] => billing
[name] => Jason Fonseca
[companyname] => Cyber
[address1] => 8 springstein
[division] => NT
[postalcode] => 34245
[countrycode] => AU
[email] => jason@bigcreative.com.au
[phone] => 89549854
[mobilephone] => 984590598
)
[1] => SimpleXMLElement Object
(
[addresstype] => shipping
[name] => Jason Fonseca
[companyname] => Cyber
[address1] => 8 springstein
[division] => NT
[postalcode] => 34245
[countrycode] => AU
[email] => jason@bigcreative.com.au
[phone] => 89549854
)
)
)
И во втором случае я получаю следующее:
[orderaddresses] => SimpleXMLElement Object
(
[orderaddress] => SimpleXMLElement Object
(
[addresstype] => billing
[name] => Jason Fonseca
[companyname] => Cyber
[address1] => 8 springstein
[division] => NT
[postalcode] => 34245
[countrycode] => AU
[email] => jason@bigcreative.com.au
[phone] => 89549854
[mobilephone] => 984590598
)
)
Наблюдатель, Кин заметитчто теперь, если я попытаюсь получить доступ к orderaddresses-> orderaddress, то это будет иметь другую структуру в зависимости от того, есть ли два адреса (или больше) или только один адрес.Пример 2 это числовой индексный массив, пример два - это ассоциативный объект.
Для стандартизации я использовал некоторый код, который выглядит следующим образом:
if(!isset($content['orderlines']['orderline'][0]))
{
$temp = $content['orderlines']['orderline'];
unset($content['orderlines']['orderline']);
$content['orderlines']['orderline'][0] =$temp;
}
(вымогу игнорировать тот факт, что я использую ассоциативные массивы здесь, у меня есть подпрограмма, которая выполняет преобразование, но я проверил, и эта подпрограмма не меняет результат).
У меня вопрос, какЯ должен правильно интерпретировать эти данные?Имея этот кусочек кода каждый раз, когда я пытаюсь получить доступ к порядковому адресу и строкам заказа, это действительно грязно.Нет ли лучшего способа?
Мне пришла в голову мысль о том, чтобы отредактировать мою процедуру преобразования, чтобы справиться с этим.Если вы думаете, что это путь, то дайте мне знать, но я подумал, что эта проблема наверняка возникнет много, и у кого-то должно быть умное и краткое решение?
Спасибо