2011-04-10 69 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'};