考虑以下XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<product code="WERGTR">
</product>
<product code="HERGGFH">
</product>
<product code="NYTERBT">
</product>
<product code="NUYRTHT">
</product>
<misc>
<copyrightHTML>Somo stuff</copyrightHTML>
<categoryLink name="Attr1">http://www.example.com/val1</categoryLink>
<categoryLink name="Attr2">http://www.example.com/val2</categoryLink>
<categoryLink name="Attr3">http://www.example.com/val3</categoryLink>
<categoryLink name="Attr4">http://www.example.com/val4</categoryLink>
</misc>
</catalog>
如何回显每个<categoryLink>
元素?显示其值和属性name
值?
我尝试过使用
$pricesDatabase = "http://www.example.com/database.xml";
$xml = simplexml_load_file($pricesDatabase) or die("Couldn't create database.xml");
foreach($xml->children() as $links) {
echo $links->categoryLink['name'];
echo "<br>";
}
但不起作用,它根本不显示任何内容。
我正在寻找的结果如下:
$key . ": value: " . $value . ", name: " . $nameValue
因此...
[0]: value: http://www.example.com/val1, name: Attr1
[1]: value: http://www.example.com/val2, name: Attr2
[2]: value: http://www.example.com/val3, name: Attr3
[3]: value: http://www.example.com/val4, name: Attr4
答案 0 :(得分:1)
实际上输出是:
<br><br><br><br>Attr1<br>
$xml
与文档元素节点catalog
相关联。它的孩子将是product
和misc
。前四个“
”来自product
个节点,最后一个是misc节点。您正在访问第一个categoryLink
子级及其属性name
。
foreach($xml->misc->categoryLink as $link) {
echo $link['name'], ', ', $link;
echo "\n";
}
或者使用Xpath:
foreach($xml->xpath('misc/categoryLink') as $link) {
echo $link['name'], ', ', $link;
echo "\n";
}
SimpleXMLElement对象的行为取决于它们的使用方式,您可以使用相同的名称迭代多个节点,访问列表的第一个或将其转换为字符串以获取文本内容。
答案 1 :(得分:0)
我已经想过如何:
1.-获取每个name
元素的<categoryLink>
属性值:
foreach($xml->xpath('//misc/categoryLink/@name') as $nameAttr) {
echo $nameAttr . "<br>";
}
2.-获取每个<categoryLink>
元素的值:
foreach($xml->xpath('//misc/categoryLink') as $linkVal) {
echo $linkVal . "<br>";
}
缺点是我还没弄明白如何在每一行输出两个值。