这是我的XML源:
https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
如何获取DKK(丹麦克朗)的最新汇率?
我不想使用foreach并检查货币是否为DKK...
我需要这样的东西:
$dkk_rate = $XML->Cube->Cube->currency('DKK')->rate;
知道怎么解决这个问题吗?
我认为你的xml数据有问题,因为我试图使用你的数据格式,但似乎不起作用,我试图删除xml中的一些条目。
这里是测试数据和代码
<?xml version="1.0" encoding="UTF-8"?>
<Cube>
<Cube time='2016-02-03'>
<Cube currency='USD' rate='1.0933'/>
<Cube currency='JPY' rate='130.58'/>
<Cube currency='BGN' rate='1.9558'/>
<Cube currency='CZK' rate='27.025'/>
<Cube currency='DKK' rate='7.4623'/>
<Cube currency='GBP' rate='0.75330'/>
<Cube currency='HUF' rate='310.55'/>
<Cube currency='PLN' rate='4.3982'/>
<Cube currency='RON' rate='4.5093'/>
<Cube currency='DKK' rate='7.2'/>
<Cube currency='SEK' rate='9.3580'/>
<Cube currency='CHF' rate='1.1115'/>
<Cube currency='NOK' rate='9.5138'/>
<Cube currency='HRK' rate='7.6665'/>
<Cube currency='RUB' rate='85.9910'/>
<Cube currency='TRY' rate='3.2138'/>
<Cube currency='DKK' rate='7.1'/>
<Cube currency='AUD' rate='1.5484'/>
<Cube currency='BRL' rate='4.3280'/>
<Cube currency='CAD' rate='1.5234'/>
<Cube currency='CNY' rate='7.1916'/>
<Cube currency='HKD' rate='8.5266'/>
<Cube currency='IDR' rate='15038.70'/>
<Cube currency='ILS' rate='4.3320'/>
<Cube currency='INR' rate='74.3900'/>
<Cube currency='KRW' rate='1329.87'/>
<Cube currency='MXN' rate='20.1098'/>
<Cube currency='MYR' rate='4.6121'/>
<Cube currency='NZD' rate='1.6560'/>
<Cube currency='PHP' rate='52.370'/>
<Cube currency='SGD' rate='1.5631'/>
<Cube currency='THB' rate='39.199'/>
<Cube currency='ZAR' rate='17.6950'/>
</Cube>
</Cube>
<?php
$doc = new DOMDocument();
@$doc->load('eurofxref-daily.xml');
if( $doc) {
$xpath = new DOMXPath($doc);
$result = $xpath->query("//Cube[@currency='DKK']");
for ($i=0; $i < $result->length; $i++) {
echo $result[$i]->getAttribute("rate")."<br>";
}
echo "<hr>";
$last = $xpath->query("//Cube[@currency='DKK'][last()]");
echo "Last:".$last[0]->getAttribute("rate")."<br>";
}
?>
我希望这能有所帮助...
试试这个
$string = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:Sender><gesmes:name>European Central Bank</gesmes:name></gesmes:Sender>
<Cube>
<Cube time='2016-02-03'>
<Cube currency='USD' rate='1.0933'/>
<Cube currency='JPY' rate='130.58'/>
<Cube currency='BGN' rate='1.9558'/>
<Cube currency='CZK' rate='27.025'/>
<Cube currency='DKK' rate='7.4623'/>
<Cube currency='GBP' rate='0.75330'/>
<Cube currency='HUF' rate='310.55'/>
<Cube currency='PLN' rate='4.3982'/>
<Cube currency='RON' rate='4.5093'/>
<Cube currency='SEK' rate='9.3580'/>
<Cube currency='CHF' rate='1.1115'/>
<Cube currency='NOK' rate='9.5138'/>
<Cube currency='HRK' rate='7.6665'/>
<Cube currency='RUB' rate='85.9910'/>
<Cube currency='TRY' rate='3.2138'/>
<Cube currency='AUD' rate='1.5484'/>
<Cube currency='BRL' rate='4.3280'/>
<Cube currency='CAD' rate='1.5234'/>
<Cube currency='CNY' rate='7.1916'/>
<Cube currency='HKD' rate='8.5266'/>
<Cube currency='IDR' rate='15038.70'/>
<Cube currency='ILS' rate='4.3320'/>
<Cube currency='INR' rate='74.3900'/>
<Cube currency='KRW' rate='1329.87'/>
<Cube currency='MXN' rate='20.1098'/>
<Cube currency='MYR' rate='4.6121'/>
<Cube currency='NZD' rate='1.6560'/>
<Cube currency='PHP' rate='52.370'/>
<Cube currency='SGD' rate='1.5631'/>
<Cube currency='THB' rate='39.199'/>
<Cube currency='ZAR' rate='17.6950'/>
</Cube>
</Cube>
</gesmes:Envelope>
XML;
$xml = new SimpleXMLElement($string);
$result = $xml->xpath('//*[@currency="DKK"]');
echo $result[0]['rate'];
可以使用DOM中的Xpath表达式直接获取值:
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXPath($document);
$xpath->registerNamespace('e', 'http://www.ecb.int/vocabulary/2002-08-01/eurofxref');
echo $xpath->evaluate("number(//e:Cube[@currency='DKK'][last()]/@rate)");
输出:
7.4623
XML使用默认名称空间。Cube
元素节点实际上位于名称空间http://www.ecb.int/vocabulary/2002-08-01/eurofxref
。Xpath没有默认名称空间,因此必须为其注册前缀,然后在表达式中使用它。
Cube
元素//e: Cube
DKK
//e: Cube[@currency='DKK']
货币
属性过滤它们
//e: Cube[@currency='DKK'][last()]
rate
属性节点//e: Cube[@currency='DKK'][last()]/@rate
number(//e: Cube[@currency='DKK'][last()]/@rate)
最后一步仅适用于DOMXpath::evaluate()
,DOMXpath::query()
和simplexmlement::xpath()
只能返回节点列表/数组。因此,在SimpleXML中,必须访问结果数组的第一个元素。
$root = new SimpleXmlElement($xml);
$root->registerXpathNamespace('e', 'http://www.ecb.int/vocabulary/2002-08-01/eurofxref');
echo $root->xpath("//e:Cube[@currency='DKK'][last()]/@rate")[0];
问题内容: 这是一项学术任务,我们将获得一个非常大的XML文件,其中包含数百个此类条目。对于每个项目,我们都应列出经理的ID,将项目添加到列表中的最后一个人员的人员ID以及当前的项目数。我已阅读并重新阅读了Oracle DOM API和各种Node API。我们正在使用JAVA,我一生都无法弄清楚如何搜索每个节点的各个“字段” 。以下是我们提供的数据示例。 我尝试做类似的事情: 并弄乱了这段代码一
在本章中,将学习如何获取XML DOM对象的节点值。 XML文档具有称为节点的信息单元的层次结构。 对象有一个属性 - ,它返回元素的值。 在以下部分中,将讨论学习 - 获取元素的节点值 获取节点的属性值 以下所有示例中使用的node.xml如下所示 - 1. 获取节点值 使用方法以文档顺序返回具有给定标记名称的所有元素的。 示例 以下示例(getnode example.html)将XML文档(
我有以下(很大= 我有一个文件,它定义了我要提取的字段及其路径: 因此,HotelName的路径是:。 现在我想了解每家酒店的信息。我无法为它们创建类(如这里),因为脚本必须是动态的,并且将传递具有不同定义文件的不同XML文件。 我如何通过使用路径来解决这个问题,没有类,内存使用率低(= //编辑:一切都已实现。我只需要一种方法来遍历酒店,并使用我拥有的路径获取它们的值。
我有一个XML文件,我想取两个值。以下是XML: 我想让我们说一下<代码> 这是我尝试过的代码,但它不起作用: 有人能给我一个工作的例子吗?我是Java和XML的新手。
我有组织。w3c。dom。具有5个节点的节点列表。UUID生成的节点ID。随机UUID() Dom结构: 我需要获取属性id=“value5”的节点之后的所有节点。因此,结果应该包含id=value6和id=value7的节点。 我创建了流 那么,我可以用Java 8流API来实现这一点吗?
我有一个SVG文档,其中包含类似于以下内容的节点: 我想做的只是选择