我试图在php中解析一个xml文档,这有点难,因为xml由对象中的对象组成。这是xml:
<Bars>
<Bar>
<BarName>the bar name</BarName>
<bar_id>0</bar_id>
<Bartenders>
<Bartender><fname>a first name</fname><lname>a last name</lname><imageURL>an image url</imageURL><shift>2</shift></Bartender>
</Bartenders>
<Events>
<Event><EventName> event</EventName><date>08/10/1989</date></Event>
</Events>
<Specials>
<Special> Special 1</Special><Special> Special 2</Special>
</Specials>
</Bar>
显然,条形xml元素中有几个'bar'对象。我想要解决的是如何解析这个文件,将内容保存到数组,使用iOS应用程序的用户输入更新数组,最后将XML写回页面。我遇到的问题是,我怎样才能将几个'调酒师','事件'和'特殊'对象保存到相应栏的数组中?我将不得不在foreach数组中创建一个调酒器数组吗?我是否需要创建一个包含调酒师,事件和特殊数组的条形类?
到目前为止,这是我的一段PHP代码:
$bars = $doc->getElementsByTagName("Bar");
foreach($bars as $bar)
{
$barNames = $bar->getElementsByTagName("BarName");
$barName = $barNames->item(0)->nodeValue;
array_push($barNameArray, $barName);
echo "<b>barName:$barName</b><br>";
}
$barsArray = array();
//make any updates to the arrays as needed
for($i = 0; $i < count($barNameArray); $i++) // write an array of bar objects from the arrays created above
正如你所看到的,如果它只是每个条形的一种元素,我很容易理解它。我无法硬编码,因为我不知道在给定时间发布了多少调酒师,酒吧,特价等等...感谢您的帮助。
答案 0 :(得分:0)
尝试使用此函数来获取XML的关联数组。
function objectsIntoArray($arrObjData, $arrSkipIndices = array())
{
$arrData = array();
// if input is object, convert into array
if (is_object($arrObjData)) {
$arrObjData = get_object_vars($arrObjData);
}
if (is_array($arrObjData)) {
foreach ($arrObjData as $index => $value) {
if (is_object($value) || is_array($value)) {
$value = objectsIntoArray($value, $arrSkipIndices); // recursive call
}
if (in_array($index, $arrSkipIndices)) {
continue;
}
$arrData[$index] = $value;
}
}
return $arrData;
}
用法:
$xmlUrl = "nameit.xml"; // XML
$xmlStr = file_get_contents($xmlUrl);
$xmlObj = simplexml_load_string($xmlStr);
$arrXml = objectsIntoArray($xmlObj);
print_r($arrXml);