按名称获取值XML feed - PHP

时间:2015-09-30 14:23:37

标签: php xml tags

我使用XML通过PHP将产品插入到我的数据库中。我可以使用以下代码访问/读取xml提要:

$xml=simplexml_load_file('testfeed.xml') or die("Error: Cannot create object");
foreach($xml->children() as $product) {
    $pname = $product->name;
    $pdescr = $product->description;
    echo $pname;
    echo $pdescr;
    }

以下是我的示例XML:

<product ID="9">
<name>Product X</name>
<properties>
<property name="categoryPath">
<value>path-to-category</value>
</property>
<property name="stock">
<value>1</value>
</property>
</properties>
</product>

很容易获取name的值,但是如何获取categorypath的值,因为这个值位于properties-&gt; property-&gt; value中并在<property name="categoryPath">中声明?

谢谢!

3 个答案:

答案 0 :(得分:2)

没有在结构中循环过多的最简单方法是使用XPath:

$values = $xml->xpath('//property[@name="categoryPath"]/value');

只需遍历返回的数组,并在需要时将每个结果转换为字符串,然后就完成了。

答案 1 :(得分:0)

更新: 虽然Jossif的答案非常擅长批量获取所有节点,但我还是在不使用xpath的情况下编辑了更新的xml结构:

$property = $product->properties->property;
$propertyAttribute = $property->attributes()->{'name'};

$catPath = ($propertyAttribute=="categoryPath")? $property->value : "value for missing paths";

print $catPath . PHP_EOL;

由于您似乎没有任何其他类似的xml节点,因此您不需要使用该属性来分隔它们。

你应该可以安全地使用这个

$catPath = $product->properties->property->value;
print $catPath;

value节点获取字符串。

答案 2 :(得分:0)

$xml=simplexml_load_file('./testfeed.xml') or die("Error: Cannot create object");
foreach($xml->children() as $product) {
    $pname = $product->name;
    $pdescr = $product->properties->property["name"];
    $pdvalue = (string)$product->properties->property->value;
    echo "Prdo Name: $pname\n";
    echo "Prod Desc: $pdescr\n";
    echo "Prod Value: $pdvalue\n";

}

输出:

   Prdo Name: Product X
   Prod Desc: categoryPath
   Prod Value: path-to-category