Php 使用simplexml和xpath进行XML解析
我正在尝试从以下示例xml中获取名称“property”属性: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> <
<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
)