2012-11-26 67 views
0

这是我用来解析远程XML代码:为什么在这里添加element.getAttribute()使我的PHP脚本返回错误500?

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

$x = $xmlDoc->documentElement; 
foreach ($x->childNodes AS $item) 
{ 
    if($item->nodeName == 'Body') 
     foreach ($item->childNodes AS $body_item) 
     { 
      if($body_item->nodeName == 'Cube') 
       foreach ($body_item->childNodes AS $cube_item) 
       {             
        print " - ".$cube_item->nodeName . " : ".$cube_item->getAttribute("currency")." = ". $cube_item->nodeValue . "<br>"; 

       } 


     } 
} 

如果我删除脚本运行平稳的getAttribute一部分,但将它添加导致它返回错误500

的XML如果您想查看或查看,请在地址处提供。

一旦我启动错误报告,我发现该错误是:Object of class DOMText could not be converted to string

+3

'500'的意思是“阅读服务器日志,找出错误的”。 – Quentin

+0

@Quentin我知道,我只是希望我做了一些愚蠢和明显的事情,因为我不经常解析XML – Bogdan

+0

如果您查看服务器日志并告诉我们错误是什么 – Quentin

回答

2

的问题是,childNodes是提供规则和文本节点。您只能在常规元素节点(类型1)上拨打getAttribute()。首先检查自己是不是文本节点在执行之前,请print

foreach ($body_item->childNodes AS $cube_item) 
{ 
    // Only attempt to print the regular DOM elements       
    if ($cube_item->nodeType == 1) 
    { 
    print " - ".$cube_item->nodeName . " : ".$cube_item->getAttribute("currency")." = ". $cube_item->nodeValue . "<br>"; 
    } 
} 

如果您foreach循环您要检查每个childNodesnodeType,您很可能会看到类似的交替3 1 3 1 3 1为空白文本和常规元素节点,当你只想要元素节点时(1

MDN has a reference list of DOM node types

顺便说一句,修复与完整的代码快速验证生产:

- Rate : AED = 0.9514<br> 
- Rate : AUD = 3.6518<br> 
- Rate : BGN = 2.3169<br> 
- Rate : BRL = 1.6787<br> 
- Rate : CAD = 3.5182<br> 
- Rate : CHF = 3.7628<br> 
- Rate : CNY = 0.5613<br> 
- Rate : CZK = 0.1790<br> 
- Rate : DKK = 0.6076<br> 
- Rate : EGP = 0.5726<br> 
- Rate : EUR = 4.5313<br> 
- Rate : GBP = 5.5990<br> 
- Rate : HUF = 1.6075<br> 
- Rate : INR = 0.0627<br> 
- Rate : JPY = 4.2601<br> 
- Rate : KRW = 0.3217<br> 
- Rate : MDL = 0.2836<br> 
- Rate : MXN = 0.2692<br> 
- Rate : NOK = 0.6169<br> 
- Rate : NZD = 2.8782<br> 
- Rate : PLN = 1.1019<br> 
- Rate : RSD = 0.0405<br> 
- Rate : RUB = 0.1127<br> 
- Rate : SEK = 0.5268<br> 
- Rate : TRY = 1.9469<br> 
- Rate : UAH = 0.4288<br> 
- Rate : USD = 3.4950<br> 
- Rate : XAU = 196.3192<br> 
- Rate : XDR = 5.3606<br> 
- Rate : ZAR = 0.3937<br> 
+0

就是这样,谢谢。 – Bogdan

相关问题