按名称获取值 XML 供稿 - PHP

Get values XML feed by name - PHP

我正在使用 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>

获取名称的值很容易,但是如何获取类别路径的值,因为这个在属性->属性->值中并在 <property name="categoryPath"> 中声明?

谢谢!

无需过多循环结构的最简单方法是使用 XPath:

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

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

更新: 虽然 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 节点获取字符串。

$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