Echo XML元素值和数组的属性值

时间:2017-01-10 14:09:52

标签: php xml xpath

考虑以下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

2 个答案:

答案 0 :(得分:1)

实际上输出是:

<br><br><br><br>Attr1<br>

$xml与文档元素节点catalog相关联。它的孩子将是productmisc。前四个“
”来自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>"; 
}

缺点是我还没弄明白如何在每一行输出两个值。