У меня есть этот XML:
<DATASET>
<ITEM>
<NAME>name product</NAME>
<SELL>0</SELL>
<PARAM>
<PARAM_NAME>material</PARAM_NAME>
<VAL>polyester</VAL>
<PERCENTAGE>96%</PERCENTAGE>
</PARAM>
<PARAM>
<PARAM_NAME>material</PARAM_NAME>
<VAL>elastan</VAL>
<PERCENTAGE>4%</PERCENTAGE>
</PARAM>
</ITEM>
</DATASET>
Мне нужен совет, как получить данные (из тегов PARAM) в поле:
$массив[0][полиэстер]=96%; $array[1][эластан]=4%;
Это очень маленькая часть оригинального XML-файла. Исходный xml читается через xmlreader, поэтому мне нужно сохранить xml reader.
Если у вас уже есть код, который читает файл, добавьте его в вопрос.






<?php
$xmlstr = "<DATASET>
<ITEM>
<NAME>name product</NAME>
<SELL>0</SELL>
<PARAM>
<PARAM_NAME>material</PARAM_NAME>
<VAL>polyester</VAL>
<PERCENTAGE>96%</PERCENTAGE>
</PARAM>
<PARAM>
<PARAM_NAME>material</PARAM_NAME>
<VAL>elastan</VAL>
<PERCENTAGE>4%</PERCENTAGE>
</PARAM>
</ITEM>
</DATASET>";
$xml_reader = new XMLReader();
$xml_reader->xml($xmlstr);
while ($xml_reader->read() && $xml_reader->name != 'PARAM');
$array = [];
$i = 0;
while ($xml_reader->name == 'PARAM') {
// load the current xml element into simplexml
$param = new SimpleXMLElement($xml_reader->readOuterXML());
// now you can use your simpleXML object ($xml)
$array[$i] = array( (string)$param->VAL => (string)$param->PERCENTAGE );
// move the pointer to the next param
$xml_reader->next('PARAM');
$i++;
}
// don’t forget to close the file
$xml_reader->close();
print_r($array);
?>
результат:
Array
(
[0] => Array
(
[polyester] => 96%
)
[1] => Array
(
[elastan] => 4%
)
)
Посмотрите, как это работает: http://sandbox.onlinephpfunctions.com/code/c7066412afc321e82bef1da570ebc54487c79fab
Если этот файл XML не является лишь небольшой частью, я бы вместо этого использовал SimpleXML для выполнения этой работы.