按名称获取值 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
我正在使用 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
:
$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