2011-04-10 47 views
3

這有點什麼我的XML看起來像:導入XML,不接受「 - 」在XML標籤

<?xml version="1.0" encoding="UTF-8"?> 
<citizen> 
    <military> 
    <rank-points>62750</rank-points> 
    <stars>1</stars> 
    <total-damage>18243</total-damage> 
    <rank>Commander</rank> 
    <fight-count>0</fight-count> 
    </military> 
</citizen> 

現在,我要導入的標籤「等級分」裏面的東西PHP使用

$rank = $xml->{'military'}->rank-points; 

但是,因爲XML標籤名稱中有一個「 - 」,它將不起作用。其結果是始終爲0

回答

6

使用此:

$rank = $xml->{'military'}->rank-points; 

PHP實際上將:

  • 搜索$xml->{'military'}->rank
  • ,並嘗試不斷points的價值。減去該值
    • 如果contant不存在,它將使用字符串值"points"

試圖執行的代碼,您實際上應該得到一個通知,說明什麼,我說:

Notice: Use of undefined constant points - assumed 'points' 


爲了解決這個問題,嘗試加入{''}周圍的名字你標籤

$rank = $xml->{'military'}->{'rank-points'}; 

這樣, PHP會知道rank-points是一回事 - 而不是減法。

4

你必須封裝在大括號中rank-points還有:

$rank = $xml->{'military'}->{'rank-points'}; 

PHP假定你想從。減去變量$軍銜含量的不同「點」。

1

SimpleXML文檔有an example正是在演示這個問題;訪問XML文檔中包含PHP命名約定不允許的字符的元素。解決方案是使用inline variable property,這基本上意味着(在您的情況下)包裝屬性名稱{''}

有趣的是,您選擇在花括號語法中包裝military,雖然它不必要地包含military,因爲它包含完全有效的普通屬性名稱(c.f. rank-points)。

所以,你的例子可以簡單地變成:

$rank = $xml->military->{'rank-points'};