使用PHP导入XML,不接受XML标记中的“ - ”

时间:2011-04-10 09:31:26

标签: php html xml import tags

这有点像我的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> 

现在,我想使用

导入标签“rank-points”中的内容
$rank = $xml->{'military'}->rank-points;

但是,因为XML标签的名称中带有“ - ”,所以它不起作用。结果始终为0.

3 个答案:

答案 0 :(得分:6)

使用此:

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

PHP实际上会:

  • 搜索$xml->{'military'}->rank
  • 并尝试将常量points的值减去该值
    • 如果不存在,则使用字符串值"points"

尝试执行你的代码,你应该收到通知,说明我说的话:

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


要解决该问题,请尝试在代码名称周围添加{''}

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

这样,PHP就会知道rank-points是一回事 - 而不是减法。

答案 1 :(得分:4)

您还必须将rank-points封装在花括号中:

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

PHP假设你试图从变量$ rank中减去“点”。

答案 2 :(得分:1)

SimpleXML文档an example正好证明了这个问题;访问包含PHP命名约定下不允许的字符的XML文档中的元素。解决方案是使用inline variable property,这基本上意味着(在您的情况下)将属性名称包装在{''}中。

有趣的是,您选择将military包装在花括号语法中,尽管不必要,因为它包含一个完全有效的普通属性名称(c.f。rank-points)。

所以你的例子可能只是变成:

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