2012-02-28 129 views
0

我想写一个php脚本,它将一个对象插入一个最初是XML格式的对象数组中。我需要将对象插入到指定的索引处,然后才能重新编写用更新的对象从中拉取数据的xml文件。这里是我的XML的插入一个对象到一个对象数组php

<?xml version="1.0" encoding="UTF-8"?> 
<Bars> 
    <Bar> 
     <BarName>Kam's</BarName> 
     <bar_id>0</bar_id> 
     <Bartenders> 
      <Bartender> 
       <fname>Max</fname> 
       <lname>Vest</lname> 
       <imageURL>http://uofi-bars.com/bartenderImages/maxvest.jpg</imageURL> 
       <shift>2</shift> 
      </Bartender> 
     </Bartenders> 
     <Events> 
      <Event> 
       <EventName>Kams event</EventName> 
       <date>08/10/1989</date> 
      </Event> 
     </Events> 
     <Specials> 
      <Special>Kam's Special 1</Special> 
      <Special>Kam's Special 2</Special> 
     </Specials> 
    </Bar> 

因此,换句话说,如果我有一个酒保谁在与bar_id = 0的ID的酒吧工作,我需要能够给酒保插入的阵列结构调酒师为那个特别的酒吧。

我用下面的PHP代码创建的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 = "Bars.xml"; // XML 
    $xmlStr = file_get_contents($xmlUrl); 
    $xmlObj = simplexml_load_string($xmlStr); 
    $arrXml = objectsIntoArray($xmlObj); 
    print_r($arrXml); 

我想我只是不知道如何引用数组对象的对象数组内...任何帮助将不胜感激!

谢谢!

+0

你是否试图使用XML文件作为表格,你可以更新删除和插入项目 – 2012-02-28 04:45:23

+0

确切地说,有没有更简单的方法来做到这一点? – thebiglebowski11 2012-02-28 05:04:02

+0

尝试xpath在PHP更多关于它在这里http://www.w3schools.com/php/func_simplexml_xpath.asp和这里http://code.huypv.net/2009/07/simplexml-xpath-php.html – 2012-02-28 05:10:45

回答

2

如果你只是替换代码:

$xmlUrl = "Bars.xml"; // XML 
$xmlStr = file_get_contents($xmlUrl); 
$xmlObj = simplexml_load_string($xmlStr); 
$arrXml = objectsIntoArray($xmlObj); 
print_r($arrXml); 

与此:

$xmlUrl = "Bars.xml"; // XML 
$xmlStr = file_get_contents($xmlUrl); 
$xml = new SimpleXMLElement($xmlStr); 
$bartenders = $xml->xpath('//Bartenders'); 
$new_bartender = $bartenders[0]->addChild('Bartender'); 
$new_bartender->fname = 'test1'; 
$new_bartender->lname = 'test2'; 
$new_bartender->imgURL = 'http://test.com'; 
$new_bartender->shift = '0'; 
print_r($bartenders); 

这应该做的伎俩,只需用适当的值替换值:)我希望这有助于!

+0

谢谢你的帮助,如果我想先取得我拥有的bar_id,请选择相应的栏,然后检查调酒师阵列是否有相应的重复项。如果你看看我发布的XML,标签 – thebiglebowski11 2012-02-28 15:30:27

+0

中还有几个条形对象我想我需要做一个查询来找到正确的bar_id ...然后再在该特定条内查询。 – thebiglebowski11 2012-02-28 16:08:08

+0

你可以使用xpath来获取这些节点对象,并检查它们的值,以便为特定情况应用逻辑,如果我正确理解后续问题:)还请不要忘记作为对您问题的“答案”进行检查 – 2012-02-28 16:15:50

相关问题