Php 使用simplexml和xpath进行XML解析

Php 使用simplexml和xpath进行XML解析,php,xml,xpath,Php,Xml,Xpath,我正在尝试从以下示例xml中获取名称“property”属性: <offers> <offer><id>1578</id> <instock>13</instock> </offer> <offer><id>1579</id> <property name="EAN">634932593250256</property> <

我正在尝试从以下示例xml中获取名称“property”属性:

<offers>
<offer><id>1578</id>
    <instock>13</instock>
</offer>
<offer><id>1579</id>
    <property name="EAN">634932593250256</property>
    <property name="Dostępne kolory">Niebiesko-Biały</property>
    <property name="Dostępne rozmiary">L</property>
    <instock>1</instock>
</offer>
</offers>
<pre>
<?php

$xmlStr = '<offers>
<offer><id>1578</id>
    <instock>13</instock>
</offer>
<offer><id>1579</id>
    <property name="EAN">634932593250256</property>
    <property name="Dostępne kolory">Niebiesko-Biały</property>
    <property name="Dostępne rozmiary">L</property>
    <instock>1</instock>
</offer>
</offers>';

$xml = new SimpleXMLElement($xmlStr);

foreach ($xml->offer as $offer)
{
    print_r($offer);
}
但我不知道该怎么做:/也许有人能帮我

我的代码:

$xml = simplexml_load_file($xmlfile);
$xml_offer = $xml->xpath("//offer");
$total = count($xml_offer);
for($i=0;$i<=$total;$i++){
    echo $xml_offer[$i]->id.' '; 
        foreach ($xml_offer[$i]->children() as $child) {
            echo $child['name'];     
        }
    echo ' <br>';
}
$xml=simplexml\u加载文件($xmlfile);
$xml_offer=$xml->xpath(//offer”);
$total=count($xml\u报价);
对于($i=0;$iid)。”;
foreach($xml_offer[$i]->children()作为$child){
echo$child['name'];
}
回声“
”; }

但它只向我显示了类似于孩子的“Dostępne rozmiary”的名称,我如何才能获得值?

这里并不需要xpath。您可以使用SimpleXMLElementphp类处理此XML,如下所示:

if property dosen't exist
    iD > 1578
if property exist:
    iD > 1579
    EAN > 634932593250256
    Dostępne kolory > Niebiesko-Biały
    Dostępne rozmiary > L

谢谢,但我需要一个xpath,它只是我代码的一小部分,所以我非常感谢任何其他建议。正如您看到的示例xml一样,我需要检查当前ID产品上是否存在属性,并检查“属性”名称。您可以通过以下方式检查属性是否存在:
if(isset($offer->property)){…}
要遍历
property
集合,请执行
foreach($offer->property as$property){…}
好的,谢谢这个我正在寻找的foreach($xml_offer[633]->property as$property){echo$property['name'.>'.$property.'
';}
SimpleXMLElement Object
(
    [id] => 1578
    [instock] => 13
)
SimpleXMLElement Object
(
    [id] => 1579
    [property] => Array
        (
            [0] => 634932593250256
            [1] => Niebiesko-Biały
            [2] => L
        )

    [instock] => 1
)