用PHP导入XML,不接受"XML标记


Import XML with PHP, does not accept "-" in XML tag

这就是我的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-points"里面的内容使用

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

但是,因为XML标记的名称中有一个"-",所以它不起作用。结果总是0

使用这个:

$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是一个东西——而不是一个减法。

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

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

PHP假定您正在尝试从变量$rank中减去内容"point"。

SimpleXML文档中有一个示例准确地演示了这个问题;访问XML文档中包含PHP命名约定不允许的字符的元素。解决方案是使用内联变量属性,这基本上意味着(在您的情况下)在{''}中包装属性名称。

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

所以你的例子可以简单地变成:

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