2013-02-04 37 views
0

我有一个看起来像这样的XML文件:试图提取simplexml的属性

<?xml version="1.0" encoding="ISO-8859-1"?> 
<products> 
    <product sku="CATDJ" type="CAT" vendor="DJ" active="1" on_sale="0" discountable="0"> 
    <name>CATALOGS</name> 
    <short_description><![CDATA[The DJ catalog features 182 pages]]></short_description> 
    <long_description><![CDATA[The DJ catalog features 182 pages.]]></long_description> 
    <price>1.5</price> 
    <stock_quantity>65</stock_quantity> 
    <release_date>2003-05-06T00:00:00-04:00</release_date> 
    <barcode>782421791315</barcode> 
    </product> 
    .... 

我能得到的价格,stock_quatity,和条形码,而不是SKU,主动或贴现数据。

这是我的代码看起来是这样的:

$myinv = simplexml_load_file('http://www.*******.com/products.xml'); 
    foreach ($myinv as $invinfo): 
    $sku = $invinfo->products->product->sku; 
    $active = $invinfo->products->product->active; 
    $deductible = $invinfo->products->product->discountable; 
    $qty=$invinfo->stock_quantity; 
    $price=$invinfo->price; 
    $upc=$invinfo->barcode; 

我到底做错了什么?顺便说一句,我是新来的PHP。

谢谢你的帮助。

回答

0

XPath可以完成获取属性值$xpath->query("//product[@name='sku']/@value");的工作。

1

我总是对从SimpleXML获得的所有东西进行类型转换,因为它总是返回一个SimpleXMLElement。 var_dump你的变量来看你自己。

<?php 

$xml = '<?xml version="1.0" encoding="ISO-8859-1"?> 
<products> 
    <product sku="CATDJ" type="CAT" vendor="DJ" active="1" on_sale="0" discountable="0"> 
    <name>CATALOGS</name> 
    <short_description><![CDATA[The DJ catalog features 182 pages]]></short_description> 
    <long_description><![CDATA[The DJ catalog features 182 pages.]]></long_description> 
    <price>1.5</price> 
    <stock_quantity>65</stock_quantity> 
    <release_date>2003-05-06T00:00:00-04:00</release_date> 
    <barcode>782421791315</barcode> 
    </product> 
</products>'; 

$myinv = new SimpleXMLElement($xml); 

$products = $myinv->product; 
foreach ($products as $product){ 

    $attrs = $product->attributes(); 
    $sku = $attrs->sku; 
    $active = $attrs->active; 
    $discountable = $attrs->discountable; 
    $qty = $product->stock_quantity; 
    $price = $product->price; 
    $upc = $product->barcode; 

    echo (string)$sku . "<br>\n"; 
    echo (string)$active . "<br>\n"; 
    echo (string)$discountable . "<br>\n"; 
    echo (string)$qty . "<br>\n"; 
    echo (string)$price . "<br>\n"; 
    echo (string)$upc . "<br>\n"; 
} 
?> 
+0

谢谢你的帮助。尽管它没有完全起作用,但它肯定会让我走向正确的方向。最终的代码工作: – user2040871