Добрый день, коллеги. Есть следующий код Код (Text): <? $xml->startElement("CONTENT"); foreach ($array as $code=>$cnt) { $xml->startElement("CODE"); $xml->startAttribute('CODE_ID'); $xml->text($code); $xml->endAttribute(); $xml->writeElement("CNT",$cnt); $xml->writeElement("UNIT_TYP","шт"); $xml->writeElement("NOM_TYP",1); $xml->writeElement("PRICE",980); $xml->endElement("CODE"); } $xml->endElement("CONTENT"); ?> работает он не совсем верно... вот как он формирует xml Код (Text): <CODE CODE_ID="4640001716850"> <CNT>1</CNT> <UNIT_TYP>шт</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> <CODE CODE_ID="4610007432870"> <CNT>2</CNT> <UNIT_TYP>шт</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> <CODE CODE_ID="0075380010505"> <CNT>1</CNT> <UNIT_TYP>шт</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> </CODE> </CODE> </CODE> обратите внимание на три последних закрывающих тега CODE. Что я делаю не так?
Вот так правильнее будет Код (Text): <? $xml->startElement("CONTENT"); foreach ($array as $code=>$cnt) { $xml->startElement("CODE"); $xml->startAttribute('CODE_ID'); $xml->text($code); $xml->endAttribute(); $xml->writeElement("CNT",$cnt); $xml->writeElement("UNIT_TYP","шт"); $xml->writeElement("NOM_TYP",1); $xml->writeElement("PRICE",980); $xml->endElement(); } $xml->endElement(); ?> и можно сразу записывать атрибут Код (Text): $xml->writeAttribute('CODE_ID',$code); вместо этого Код (Text): $xml->startAttribute('CODE_ID'); $xml->text($code); $xml->endAttribute();
За вот этот код Код (Text): $xml->writeAttribute('CODE_ID',$code); спасибо, работает. Но проблема с тремя закрывающими тегами не решилась... почему то закрываются все за раз....
Хм... вот скопировал ваш код, справкой $xml->endElement() (подчеркиваю скобки пустые должны быть). и Он работает. Ниже код и результат.. Код (Text): $xml = new XMLWriter(); $xml->openMemory(); $xml->startDocument('1.0', 'UTF-8'); $xml->startElement("CONTENT"); for($i=0;$i<=3;$i++) { $xml->startElement("CODE"); $xml->writeAttribute('CODE_ID',time()); $xml->writeElement("CNT",$i); $xml->writeElement("UNIT_TYP","шт"); $xml->writeElement("NOM_TYP",1); $xml->writeElement("PRICE",980); $xml->endElement(); } $xml->endElement(); file_put_contents('example.xml', $xml->flush(true), FILE_APPEND); Результат: Код (Text): <?xml version="1.0" encoding="UTF-8"?> <CONTENT> <CODE CODE_ID="1376250172"> <CNT>0</CNT> <UNIT_TYP>шт</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> </CODE> <CODE CODE_ID="1376250172"> <CNT>1</CNT> <UNIT_TYP>шт</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> </CODE> <CODE CODE_ID="1376250172"> <CNT>2</CNT> <UNIT_TYP>шт</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> </CODE> <CODE CODE_ID="1376250172"> <CNT>3</CNT> <UNIT_TYP>шт</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> </CODE> </CONTENT>
Приведу больший кусок кода... Код (Text): $file = fopen($path_xml.$filename,"wt"); $xml = new XMLWriter(); $xml->openMemory(); $xml->startDocument('1.0' , 'Windows-1251'); $xml->startElement("DOC"); $xml->startElement("DOC_OUT"); $xml->writeElement("NUMBER",$num); $xml->writeElement("ID_DOC",$num); $xml->writeElement("DATE","08.07.2013"); $xml->writeElement("DELIVERY_DATE",$delivery_date); $xml->writeElement("SHIPMENT_DATE",$delivery_date); $xml->writeElement("DESTINATION",$destination); $xml->writeElement("CUSTOMER",$customer); $xml->writeElement("CUSTOMER_ID",223975); $xml->writeElement("TYPE",1); $xml->startElement("CONTENT"); foreach ($array as $code=>$cnt) { $xml->startElement("CODE"); $xml->writeAttribute('CODE_ID',$code); $xml->writeElement("CNT",$cnt); $xml->writeElement("UNIT_TYP","шт"); $xml->writeElement("NOM_TYP",1); $xml->writeElement("PRICE",980); $xml->endElement(""); } $xml->endElement(""); $xml->endElement(""); $xml->endElement(""); $xml->endDocument(); $result = $xml->outputMemory(); echo $result; fwrite ($file, $result); fclose($file); Генерируется по прежнему.
Код (Text): <?xml version="1.0" encoding="WINDOWS-1251"?> <DOC> <DOC_OUT> <NUMBER>302</NUMBER> <ID_DOC>302</ID_DOC> <DATE>08.07.2013</DATE> <DELIVERY_DATE>13.08.2013 00:35:23</DELIVERY_DATE> <SHIPMENT_DATE>13.08.2013 00:35:23</SHIPMENT_DATE> <DESTINATION>Москва, Ленина 45</DESTINATION> <CUSTOMER>Марина Заславская</CUSTOMER> <CUSTOMER_ID>223975</CUSTOMER_ID> <TYPE>1</TYPE> <CONTENT> <CODE CODE_ID="4640001716850"> <CNT>1</CNT> <UNIT_TYP>шт</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> <CODE CODE_ID="4610007432870"> <CNT>2</CNT> <UNIT_TYP>шт</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> <CODE CODE_ID="0075380010505"> <CNT>1</CNT> <UNIT_TYP>шт</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> </CODE> </CODE> </CODE> </CONTENT> </DOC_OUT> </DOC>
Замените Код (Text): $xml->startDocument('1.0' , 'Windows-1251'); на Код (Text): $xml->startDocument('1.0' , 'UTF-8');
Код (Text): $file = fopen('example.xml',"wt"); $array = array('4640001716850', '46400017168123'); $xml = new XMLWriter(); $xml->openMemory(); $xml->startDocument('1.0' , 'UTF-8'); $xml->startElement("DOC"); $xml->startElement("DOC_OUT"); $xml->writeElement("CUSTOMER_ID",223975); $xml->writeElement("TYPE",1); $xml->startElement("CONTENT"); foreach ($array as $code=>$cnt) { $xml->startElement("CODE"); $xml->writeAttribute('CODE_ID',$code); $xml->writeElement("CNT",$cnt); $xml->writeElement("UNIT_TYP","шт"); $xml->writeElement("NOM_TYP",1); $xml->writeElement("PRICE",980); $xml->endElement(); } $xml->endElement(); $xml->endElement(); $xml->endElement(); $xml->endDocument(); $result = $xml->outputMemory(); echo $result; fwrite ($file, $result); fclose($file); Результат: Код (Text): <?xml version="1.0" encoding="UTF-8"?> <DOC> <DOC_OUT> <CUSTOMER_ID>223975</CUSTOMER_ID> <TYPE>1</TYPE> <CONTENT> <CODE CODE_ID="0"> <CNT>4640001716850</CNT> <UNIT_TYP>רע</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> </CODE> <CODE CODE_ID="1"> <CNT>46400017168123</CNT> <UNIT_TYP>רע</UNIT_TYP> <NOM_TYP>1</NOM_TYP> <PRICE>980</PRICE> </CODE> </CONTENT> </DOC_OUT> </DOC> Добавлено спустя 48 секунд: Работает на отлично!
Не буду форматировать, вот вывод Код (Text): <p>Function fl_out_order ()</p>Out_20130812-0042_n302_.xml<?xml version="1.0" encoding="UTF-8"?> <DOC><DOC_OUT><NUMBER>302</NUMBER><ID_DOC>302</ID_DOC><DATE>08.07.2013</DATE><DELIVERY_DATE>13.08.2013 00:42:57</DELIVERY_DATE><SHIPMENT_DATE>13.08.2013 00:42:57</SHIPMENT_DATE><DESTINATION>РњРѕСЃРєРІР°, </DESTINATION><CUSTOMER>Марина Заславская</CUSTOMER><CUSTOMER_ID>223975</CUSTOMER_ID><TYPE>1</TYPE><CONTENT><CODE CODE_ID="4640001716850"><CNT>1</CNT><UNIT_TYP>шт</UNIT_TYP><NOM_TYP>1</NOM_TYP><PRICE>980</PRICE><CODE CODE_ID="4610007432870"><CNT>2</CNT><UNIT_TYP>шт</UNIT_TYP><NOM_TYP>1</NOM_TYP><PRICE>980</PRICE><CODE CODE_ID="0075380010505"><CNT>1</CNT><UNIT_TYP>шт</UNIT_TYP><NOM_TYP>1</NOM_TYP><PRICE>980</PRICE></CODE></CODE></CODE></CONTENT></DOC_OUT></DOC> <p>END</p> три тега все там же... Добавлено спустя 1 минуту 56 секунд: Буду копать... Добавлено спустя 21 минуту 9 секунд: Нашел... не до конца очистил Код (Text): $xml->endElement(""); сделал Код (Text): $xml->endElement(); и заработало. Спасибо за отклик.