如何将XML feed中的数据添加到mysql DB

时间:2012-01-03 23:57:25

标签: php xml xml-parsing feed

我正在收到交易Feed并想要处理它,以便我可以将其添加到我的数据库中。以下是它的格式:

<deals>
 <item>
  <couponid>int</couponid>
  <merchantid>int</merchantid>
  <merchantname>string</merchantname>
  <network>string</network>
  <label>string</label>
  <restrictions>string</restrictions>
  <couponcode>string</couponcode>
  <link>string</link>
  <directlink>string</directlink>
  <startdate>YYYY-MM-DD HH:MM TMZ</startdate>
  <enddate>YYYY-MM-DD HH:MM TMZ</enddate>
  <image>string</image>
  <dealtypes>
   <type>string</type>
  </dealtypes>
  <categories>
   <category>string</category>
  </categories>
  <status>status</status>
  <lastupdated>YYYY-MM-DD HH:MM TMZ</lastupdated>
  <errorreporturl>string</errorreporturl>
  <changeaudit>string</changeaudit>
  <price>string</price>
  <listprice>string</listprice>
  <discount>string</discount>
  <percent>string</percent>
  <local>
     <city>string</city>
     <state>string</state>
     <zipcode>string</zipcode>
     <address>string</address>
     <businessname>string</businessname>
     <businessurl>string</businessurl>
     <title2>string</title2>
     <expirationdate>string</expirationdate>
     <minpurchase>int</minpurchase>
     <maxpurchase>int</maxpurchase>
     <limitedqty>bool</limitedqty>
     <region>string</region>
  </local>
 </item>
</deals>

我可以使用以下方式处理大部分项目:

'couponid' => $node->getElementsByTagName('couponid')->item(0)->nodeValue

但是,如何处理“本地”节点中的项目。并非Feed中的所有项都具有此“本地”节点。我该如何处理?这会有用吗?

$localData = $node->getElementsByTagName('local')->item(0);
if $localData {
'city' => $node->getElementsByTagName('local')->item(city)->nodeValue;
'state' => $node->getElementsByTagName('local')->item(state)->nodeValue;
etc..
}

2 个答案:

答案 0 :(得分:1)

根据DOMNodeListdocsDOMNodeList::item将返回

  

DOMNodeList中索引位置的节点,如果是,则为NULL   不是有效的索引。

所以,不,你不能做$node->getElementsByTagName('local')->item(city)

执行此操作$localData = $node->getElementsByTagName('local')->item(0);时,您的$localData变量设置为DOMNode对象,您可以像其他DOMNode个对象的子项一样访问其子项。

<强>然而

如果您只是阅读XML而不是编写/追加,那么PHP的SimpleXML比DOM更易于使用(因此得名),我建议您使用它:

$deals = new SimpleXMLElement($my_xml);

$city  = $deals->item->local->city[0];
$state = (string) $deals->item->local->state;

echo "city:  $city\n";
echo "state: $state\n";

请注意,使用(string)强制转换的方法会产生与仅引用元素的[0]键相同的结果。

答案 1 :(得分:0)

在php中,您可以执行以下操作:

- &GT;获取xml文件:

$myXMLString = file_get_contents($url);
$doc = new DOMDocument('1.0', 'iso-8859-1');
$doc->loadXML($myXMLString);
$deals = $doc->getElementsByTagName("item");

foreach($deals as $item){
   functionDeals($item);
}

然后在函数“functionDeals”中以相同的方式提取子元素。 否则最常用的方法是使用Hibernate(Java):请点击此链接http://javaboutique.internet.com/tutorials/mapping/

希望这个帮助