PHP - 从xml文件中获取值

时间:2016-10-12 09:09:25

标签: php xml

使用以下xml:http://www.bnr.ro/nbrfxrates.xml

我如何获得欧元价值?

一直在尝试这样......但没有运气。

            $xmlDoc = new DOMDocument();
            $xmlDoc->load('http://www.bnr.ro/nbrfxrates.xml');

            $searchNode = $xmlDoc->getElementsByTagName("Cube");

            var_dump($searchNode);

            foreach ($searchNode as $searchNode) {
                $valueID = $searchNode->getAttribute('Rate');

                echo $valueID;

            }

3 个答案:

答案 0 :(得分:1)

检查

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load('http://www.bnr.ro/nbrfxrates.xml');


foreach ($xmlDoc->getElementsByTagName('Rate') as $searchNode) {
    if($searchNode->getAttribute('currency') === 'EUR') {
        echo $searchNode->nodeValue;
    }
}

?>

答案 1 :(得分:1)

首先Rate不是属性,而是元素。所以你需要另一个getElementsByTagName('Rate')并循环它。但是,XML使用默认命名空间,因此getElementByTagNameNS('http://www.bnr.ro/xsd', 'Rate')将是正确的方法。

更简单的方法是使用Xpath直接获取值:

$document = new DOMDocument();
$document->load('http://www.bnr.ro/nbrfxrates.xml');
$xpath = new DOMXpath($document);
$xpath->registerNamespace('r', 'http://www.bnr.ro/xsd');

var_dump(
  $xpath->evaluate('number(//r:Cube/r:Rate[@currency="EUR"])')
);

输出:

float(4.4961)

Xpath没有默认命名空间,因此您必须为其注册自己的别名(我在示例中使用了r。)。

Xpath表达式

  • 获取任何{http://www.bnr.ro/nbrfxrates.xml}Cube
    //r:Cube
  • 获取所有{http://www.bnr.ro/nbrfxrates.xml}Rate个孩子 //r:Cube/r:Rate
  • currency属性进行过滤 //r:Cube/r:Rate[@currency="EUR"]
  • 将第一个找到的节点转换为数字
    number(//r:Cube/r:Rate[@currency="EUR"])

答案 2 :(得分:0)

<?php
    $xmlDoc = new DOMDocument();
    $xmlDoc->load('http://www.bnr.ro/nbrfxrates.xml');

    foreach($xmlDoc->getElementsByTagName("Rate")  as $node)
    {
        $currency = $node->getAttribute('currency');
        if($currency == 'EUR')
        {
             $value = $node->nodeValue;
        }
    }
    echo 'value for EUR is - '. $value;

?>