Я пытаюсь создать следующую строку xml с простыми xml и php:
<stream languageCode="BG" mpegStreamID="0xBD" mpegSubstreamID="0x20"/>
<stream languageCode="EN" mpegStreamID="0xBD" mpegSubstreamID="0x21"/>
<stream languageCode="FR" mpegStreamID="0xBD" mpegSubstreamID="0x22"/>
Пока я делал это в цикле:
foreach($langs as $key => $value)
{
$this->lang->addAttribute('languageCode', $var1, 'mpegStreamID', '0xBD', 'mpegSubStreamID', '0x2'.$i);
}
Но я получаю следующую ошибку:
SimpleXMLElement :: addAttribute () ожидает не более 3 параметров из 6 заданных
Таким образом я попробовал это:
foreach($langs as $key => $value)
{
$this->streamLang->addAttribute('languageCode', $var);
$this->streamLang->addAttribute('mpegStreamID', '0xBD');
$this->streamLang->addAttribute('mpegSubStreamID', '0x2'.$i);
$i++;
}
Но получите эту ошибку:
добавить Атрибут уже существует
Ошибки довольно ясны, но я не знаю, как создать обходной путь, так сказать.
1 ответ
Первое сообщение об ошибке самоочевидно, здесь есть некоторые функции, которые позволяют использовать переменное количество аргументов, но большинство из них - нет. SimpleXMLElement::addAttribute()
ожидает имя, значение и, возможно, пространство имен. Вы должны вызывать его для каждого атрибута, который хотите добавить.
В цикле вы добавляете 3 атрибута к одному и тому же узлу несколько раз. Итак, во второй итерации атрибут уже существует, и вызов не выполняется.
Здесь недостаточно вашего источника (очевидно, что это часть более крупного класса - вы используете $ this), чтобы рассказать об этом гораздо больше. Но вот полный пример:
$languages = ['BG', "EN", "FR"];
$streams = new SimpleXMLElement('<streams/>');
foreach ($languages as $index => $language) {
$stream = $streams->addChild('stream');
$stream->addAttribute('languageCode', $language);
$stream->addAttribute('mpegStreamID', '0xBD');
$stream->addAttribute('mpegSubStreamID', '0x2'.($index + 1));
}
echo $streams->asXml();
Это будет выглядеть почти так же, если вы используете DOM:
$languages = ['BG', "EN", "FR"];
$document = new DOMDocument();
$streams = $document->appendChild($document->createElement('streams'));
foreach ($languages as $index => $language) {
$stream = $streams->appendChild($document->createElement('stream'));
$stream->setAttribute('languageCode', $language);
$stream->setAttribute('mpegStreamID', '0xBD');
$stream->setAttribute('mpegSubStreamID', '0x2'.($index + 1));
}
$document->formatOutput = TRUE;
echo $document->saveXml();
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.