解析XML,使用SimpleXMLElement在PHP中获取节点
我必须将我的供应商的XML文件转换为CSV版本(适用于Magento商店) 我编写了简单的php脚本来实现这一点,但我不明白为什么它不起作用(我有其他供应商,但他们的XML版本要简单得多) 但说到点子上: 我有这个XML解析XML,使用SimpleXMLElement在PHP中获取节点,php,xml,simplexml,Php,Xml,Simplexml,我必须将我的供应商的XML文件转换为CSV版本(适用于Magento商店) 我编写了简单的php脚本来实现这一点,但我不明白为什么它不起作用(我有其他供应商,但他们的XML版本要简单得多) 但说到点子上: 我有这个XML <pasaz:Envelope xmlns:pasaz="http://schemas.xmlsoap.org/soap/envelope/"> <pasaz:Body> <loadOffers xmlns="urn:Exp
<pasaz:Envelope xmlns:pasaz="http://schemas.xmlsoap.org/soap/envelope/">
<pasaz:Body>
<loadOffers xmlns="urn:ExportB2B">
<offers>
<offer>
<id>9</id>
<name>
<![CDATA[ Luneta celownicza Light Stream 4,5-14x44 30 mm AO ]]>
</name>
<price>2299</price>
<url>
<![CDATA[
http://kolba.pl/luneta-celownicza-light-stream-4-5-14x44-30-mm-ao-p9.html
]]>
</url>
<categoryId>
<![CDATA[ Lunety wiatrówkowe ]]>
</categoryId>
<description>
<![CDATA[
description
]]>
</description>
<image>
<![CDATA[
http://kolba.pl/media/images/products/xl_org/p00009.jpg
]]>
</image>
<availability>1</availability>
</offer>
<offer>
<id>61</id>
<name>
<![CDATA[ Szyna- podwyższenie 2 częściowe 11/11 BKL-166 MB ]]>
</name>
<price>145</price>
<url>
<![CDATA[
http://kolba.pl/szyna-podwyzszenie-2-czesciowe-11-11-bkl-166-mb-p61.html
]]>
</url>
<categoryId>
<![CDATA[ Montaże ]]>
</categoryId>
<description>
<![CDATA[
description
]]>
</description>
<image>
<![CDATA[
http://kolba.pl/media/images/products/xl_org/p00061.jpg
]]>
</image>
<availability>1</availability>
</offer>
</offers>
</loadOffers>
</pasaz:Body>
</pasaz:Envelope>
9
2299
1.
61
145
1.
我正在使用这个脚本:
$plik=file_get_contents('kolba.xml');
$plik=utf8_encode($plik);
$movies = new SimpleXMLElement($plik);
$stala_czesc='"admin";"base";"Default";"simple";';
$stala_czesc2=';"Żaden";0.0000;';
$stala_czesc3='"Not Visible Individually";1;"Włączone"'."\n";
foreach ($movies->offer as $product)
{
//echo '<br>Przetwarzam';
$wynik="";
$wynik=$stala_czesc;
$nazwa=$product->name;
$nazwa=str_replace('"',"",$nazwa);
$nazwa = preg_replace("/[^[:alnum:][:punct:] -]/","",$nazwa);
$wynik.='"'.$product->id.'_kolba";"'.$nazwa.'";
'.number_format(intval($product->price),4,'.','').';
'.number_format(intval($product->price),4,'.','').';
'.number_format(intval($product->price),4,'.','').$stala_czesc2.$product->availability.';'.$stala_czesc3;
echo '<br>';
echo $wynik;
}
$plik=file_get_contents('kolba.xml');
$plik=utf8_编码($plik);
$movies=新的simplexmlement($plik);
$stala_czesc='管理'、'基础'、'默认'、'简单';
$stala_Czes2=';“Żaden”;0.0000;
$stala_czesc3='“单独不可见”;1;“Włączone”'。“\n”;
foreach($movies->offer as$product)
{
//回声'
Przetwarzam';
$wynik=“”;
$wynik=$stala_czesc;
$nazwa=$product->name;
$nazwa=str_替换(“,”,$nazwa);
$nazwa=preg_replace(“/[^[:alnum:][:punt:][-]/”,“”,$nazwa);
$wynik.='''.$product->id'.'U kolba'“'.$nazwa'”;
“.number_格式(intval($product->price),4,”,“);
“.number_格式(intval($product->price),4,”,“);
“.number_格式(intval($product->price),4,”,“)$stala_czesc2.$product->availability.;”。$stala_czesc3;
回声“
”;
echo$wynik;
}
但是对于迭代器永远不会启动,为什么?您遇到的问题是由于名称空间的信封/正文,这里有一个肮脏的黑客程序,至少可以访问您的数据
$movies = new SimpleXMLElement($plik);
$movies = $movies->children('http://schemas.xmlsoap.org/soap/envelope/');
$offers = $movies->children()->loadOffers->offers;
并循环报价
foreach ($offers->offer as $product) { .. }
查看simplexml\u load\u stringyou do
$movies->offer
,这意味着在根节点“pasaz:Envelope”下必须有一个子节点“offer”。如果查看XML,您会发现情况并非如此。因此毫不奇怪,这不起作用。请查看并确保您了解如何使用名称空间。