我正在收到交易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..
}
答案 0 :(得分:1)
根据DOMNodeList
docs,DOMNodeList::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/
希望这个帮助