使用以下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;
}
答案 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
。)。
{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;
?>