Импорт XML с PHP, не принимает "-" в теге XML - PullRequest
3 голосов
/ 10 апреля 2011

Вот как выглядит мой 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" с помощью PHP, используя

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

Но, потому что у тега XML есть «-» в его имени, это не будет работать.Результат всегда равен 0.

Ответы [ 3 ]

6 голосов
/ 10 апреля 2011

Используя это:

$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 - это одно, а не вычитание.

4 голосов
/ 10 апреля 2011

Вам также нужно будет заключить rank-points в фигурные скобки:

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

PHP предполагает, что вы пытаетесь вычесть постоянную "точку" из переменной $ rank.

1 голос
/ 10 апреля 2011

Документация SimpleXML содержит пример , демонстрирующий именно эту проблему;доступ к элементам в документе XML, которые содержат символы, не разрешенные в соответствии с соглашением об именах PHP.Решение состоит в том, чтобы использовать встроенное свойство переменной , что в основном означает (в вашем случае) перенос имени свойства в {' и '}.

ItИнтересно, что вы выбрали обтекание military в синтаксисе фигурных скобок, хотя и неоправданно, поскольку оно содержит совершенно правильное простое имя свойства (cf rank-points).

Таким образом, ваш пример может просто стать:

$rank = $xml->military->{'rank-points'};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...