【问题标题】:Parse XML, get node in PHP using SimpleXMLElement解析 XML,使用 SimpleXMLElement 在 PHP 中获取节点
【发布时间】:2012-12-30 17:22:48
【问题描述】:

我必须将 XML 文件从我的供应商转换为 CSV 版本(用于 Magento 商店)。

我编写了简单的 php 脚本来执行此操作,但我无法弄清楚它为什么不起作用(我有其他供应商,但他们的 XML 版本要简单得多。

但重点是:

我有这个 XML

<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>

我正在使用这个脚本:

$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;
}

但是FOR 迭代器永远不会启动,为什么?

【问题讨论】:

  • 看看simplexml_load_string
  • 你做$movies-&gt;offer 这意味着在根节点“pasaz:Envelope”下面必须有一个子节点“offer”。如果您查看您的 XML,您会发现情况并非如此。所以毫不奇怪,这不起作用。看看php.net/manual/en/simplexml.examples-basic.php
  • 还要确保您了解如何使用命名空间。

标签: php xml simplexml


【解决方案1】:

您遇到的问题是由于命名空间的信封/正文,这是一个肮脏的黑客,至少可以获取您的数据;

$movies = new SimpleXMLElement($plik);
$movies = $movies->children('http://schemas.xmlsoap.org/soap/envelope/');
$offers = $movies->children()->loadOffers->offers;

并循环报价

foreach ($offers->offer as $product) { .. }

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 2015-11-11
    • 2013-07-13
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多