<gesmes:Envelope>
可能不是 「全部真相」。像gesmes:
這樣的前綴需要與uri關聯。在你的情況下,它可能是
<gesmes:Envelope
xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01"
xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"
>
現在你要處理namespaces ....
有PHP的simplexml module。它有一些shortcomings when namespaces are involved。但無論如何...這裏是:
$s = new SimpleXMLelement(getData());
foreach($s->Cube as $cubeContainer) {
foreach($cubeContainer as $cubeEntry) {
echo 'time: ', $cubeEntry['time'], "\n";
foreach($cubeEntry->Cube as $cubeElement) {
echo ' ', $cubeElement['currency'], '=', $cubeElement['rate'], "\n";
}
}
}
// now that was easy ...now the fun of having namespaces/prefixes
foreach($s->children("http://www.gesmes.org/xml/2002-08-01")->subject as $subject) {
echo 'subject: ', $subject, "\n";
}
foreach($s->children("http://www.gesmes.org/xml/2002-08-01")->Sender as $sender) {
foreach($sender->children("http://www.gesmes.org/xml/2002-08-01")->name as $name) {
echo 'sender/name: ', $name, "\n";
}
}
function getData() {
return '<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="2010-03-26">
<Cube currency="USD" rate="1.3353"/>
<Cube currency="JPY" rate="124.00"/>
<Cube currency="BGN" rate="1.9558"/>
<Cube currency="CZK" rate="25.418"/>
</Cube>
</Cube>
</gesmes:Envelope>';
}
打印
time: 2010-03-26
USD=1.3353
JPY=124.00
BGN=1.9558
CZK=25.418
subject: Reference rates
sender/name: European Central Bank
如果你想使用XPath來查找特定元素/節點(或SimpleXMLElement::xpath或DOMXPath,你將與DOMDocument爲pointed out by cletus使用)你必須先註冊命名空間。
例如
$s = new SimpleXMLelement(getData());
$s->registerXPathNamespace('gesmes', 'http://www.gesmes.org/xml/2002-08-01');
foreach($s->xpath('//gesmes:name[position()=1]') as $n){
echo $n, "\n";
}
打印European Central Bank
。
還有其他解析XML文檔的函數/方法。例如。 XMLReader或(這可能是最接近你的原始任務「我怎麼能得到存儲在哈希映射中的值?」)xml_parse_into_struct()
「存儲在哈希映射或類似結構中」你能詳細解釋一下嗎? – VolkerK 2010-03-28 12:54:37
鍵 - >值 鍵是貨幣名稱,價值是匯率 – csU 2010-03-28 13:08:58