我试图访问我的XML元素,我可以检索我的数据,但不能检索命名空间值。 我正在尝试检索fromPrice值的值(24.95)有人可以帮助我吗?
<?xml version="1.0" encoding="utf-8"?>
<products>
<product ID="14">
<name>Productname</name>
<price currency="EUR">9.95</price>
<URL>http://www.google.com</URL>
<images>
<image>image.jpg</image>
</images>
<description><![CDATA[<p>long description</p>]]></description>
<categories/>
<properties>
<property name="brand">
<value>Brandname</value>
</property>
<property name="deliveryTime">
<value>1 - 3 days</value>
</property>
<property name="fromPrice">
<value>24.95</value>
</property>
<property name="EAN">
<value>12345</value>
</property>
<property name="sku">
<value></value>
</property>
<property name="shipping_costs">
<value>6.95</value>
</property>
</properties>
<variations/>
</product>
</products>
<!-- Total number of products: 1 -->
我尝试使用simpleXML和PHP访问我的数据:
$data = simplexml_load_file("cache/file.xml");
if (!$data){die();}
else{
foreach($data->product as $record )
{
//Use that namespace
$namespaces = $record->properties->getNameSpaces(true);
$dc = $record->properties->children($namespaces['property']);
$priceold = $dc->fromPrice;
}
}
echo 'priceold: '.$priceold.'<br />';
但这不起作用:(有人可以帮帮我吗?
答案 0 :(得分:1)
我在XML中看不到任何名称空间。无论如何,实现你想要的最简单/最短的方法是使用XPath。这是一个solution:
<?php
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product ID="14">
<name>Productname</name>
<price currency="EUR">9.95</price>
<URL>http://www.google.com</URL>
<images>
<image>image.jpg</image>
</images>
<description><![CDATA[<p>long description</p>]]></description>
<categories />
<properties>
<property name="brand">
<value>Brandname</value>
</property>
<property name="deliveryTime">
<value>1 - 3 days</value>
</property>
<property name="fromPrice">
<value>24.95</value>
</property>
<property name="EAN">
<value>12345</value>
</property>
<property name="sku">
<value />
</property>
<property name="shipping_costs">
<value>6.95</value>
</property>
</properties>
<variations />
</product>
</products>
XML;
$sxe = new SimpleXMLElement($xml);
$value = current($sxe->xpath('//property[@name="fromPrice"]/value'));
echo $value;
24.95
答案 1 :(得分:0)
您的XML中没有名称空间。我假设您的意思是name
节点的<property>
属性:
<property name="fromPrice">
要访问不知道名称的属性,请使用attributes()
:
$xml = simplexml_load_string($x); // assume XML in $x
$properties = $xml->xpath("//property");
foreach ($properties as $property) {
foreach($property->attributes() as $a => $b)
echo $a,'="',$b,"\"\n";
}
此代码将...
(1)选择所有<property>
个节点(xpath
)和
(2)打印出每个节点的属性名称和值
看到这个有效:http://3v4l.org/Rkuqf
see the manual on php.net
如果您知道要访问的属性的名称,请在问题的另一个答案中使用 Rolando Isidoro 所示的xpath
。< / p>