sergeiss
1.06.2009 - 12:45
Не могу прочитать XML файл в ПХП, нужна помощь.
Файл имеет такую структуру (вообще он большой, только в архиве занимает 153 КБ, а в обычном виде 18 метров):
Код |
<?xml version="1.0" encoding="UTF-8" ?> <bulkCmConfigDataFile xmlns:es="EricssonSpecificAttributes.4.7.xsd" xmlns:un="utranNrm.xsd" xmlns:xn="genericNrm.xsd" xmlns:gn="geranNrm.xsd" xmlns="configData.xsd"> <fileHeader fileFormatVersion="32.615 V4.5" vendorName="Ericsson" /> <configData dnPrefix="Undefined"> <xn:SubNetwork id="ONRM_ROOT_MO_R"> <xn:SubNetwork id="RNC01NN"> <xn:MeContext id="RNC01NN"> <xn:VsDataContainer id="RNC01NN"> <xn:attributes> <xn:vsDataType>vsDataMeContext</xn:vsDataType> <xn:vsDataFormatVersion>EricssonSpecificAttributes.4.7</xn:vsDataFormatVersion> <es:vsDataMeContext> <es:userLabel>RNC01NN</es:userLabel> <es:ipAddress>10.76.128.10</es:ipAddress> <es:neMIMversion>vG.5.30</es:neMIMversion> <es:bcrLastChange>1242721220361</es:bcrLastChange> <es:bctLastChange>1242646438529</es:bctLastChange> </es:vsDataMeContext> </xn:attributes> </xn:VsDataContainer> <xn:ManagedElement id="1"> <xn:attributes> <xn:managedElementType>RNC</xn:managedElementType>
тут много-много всякой информации . . . . .
</xn:ManagedElement> </xn:MeContext> </xn:SubNetwork> </xn:SubNetwork> </configData> <fileFooter dateTime="2009-05-19T15:41:31Z" /> </bulkCmConfigDataFile> |
Всякие разные функции ПХП, которые я использовал, показывают только 4 элемента: bulkCmConfigDataFile, fileHeader, configData и fileFooter. А любые элементы, в названии которых в начале находится xn:, es: и другая фигня, будто бы вообще отсутствуют.
В чем причина? Это нестандартный формат файла?
Я пробовал, например, SimpleXML. Взял пример из хэлпа. Но скрипт мне показал, что configData содержит 0 элементов. Собственно, вот весь код
PHP |
$f='../Initial_files/Config3G/Config_190509.xml'; if (file_exists($f)) { $xml=new SimpleXMLElement( file_get_contents( $f ) ); // это строка 45 } else { exit('Failed to open '.$f); }
echo '<br><br><br>'.$xml->getName() . "<br>";
print_xml( $xml, '....' );
function print_xml( $xml, $str ) { foreach ($xml->children() as $child) { echo $str.$child->getName() . '<br>'; print_xml( $child, $str.'....'); } } |
В браузере получаю
Код |
Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 4: parser warning : xmlns: URI configData.xsd is not absolute in C:\RMS_stat\Test\xml_load.php on line 45
Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: xmlns:gn="geranNrm.xsd" xmlns="configData.xsd"> in C:\RMS_stat\Test\xml_load.php on line 45
Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: ^ in C:\RMS_stat\Test\xml_load.php on line 45
bulkCmConfigDataFile ....fileHeader ....configData ....fileFooter |
4-я строка файла с данными содержит
Код |
xmlns:gn="geranNrm.xsd" xmlns="configData.xsd"> |
Кто-нибудь что-нибудь подскажет? Или мне не мучиться, и писать свой парсер под этот файл? Последнее не так уж и сложно, я думаю
Спустя 21 час, 26 минут, 7 секунд (2.06.2009 - 09:11) sergeiss написал(а):
И что, "никОго нэмАэ"?
Спустя 34 минуты, 16 секунд (2.06.2009 - 09:46) kirik написал(а):
sergeissпропробуй это:
PHP |
$xml_src = ' <bulkCmConfigDataFile xmlns:es="EricssonSpecificAttributes.4.7.xsd" xmlns:un="utranNrm.xsd" xmlns:xn="genericNrm.xsd" xmlns:gn="geranNrm.xsd" xmlns="configData.xsd"> <fileHeader fileFormatVersion="32.615 V4.5" vendorName="Ericsson" /> <configData dnPrefix="Undefined"> <xn:SubNetwork id="ONRM_ROOT_MO_R"> <xn:SubNetwork id="RNC01NN"> <xn:MeContext id="RNC01NN"> <xn:VsDataContainer id="RNC01NN"> <xn:attributes> <xn:vsDataType>vsDataMeContext</xn:vsDataType> <xn:vsDataFormatVersion>EricssonSpecificAttributes.4.7</xn:vsDataFormatVersion> <es:vsDataMeContext> <es:userLabel>RNC01NN</es:userLabel> <es:ipAddress>10.76.128.10</es:ipAddress> <es:neMIMversion>vG.5.30</es:neMIMversion> <es:bcrLastChange>1242721220361</es:bcrLastChange> <es:bctLastChange>1242646438529</es:bctLastChange> </es:vsDataMeContext> </xn:attributes> </xn:VsDataContainer> <xn:ManagedElement id="1"> <xn:attributes> <xn:managedElementType>RNC</xn:managedElementType> ';
function start_element_handler($parser, $name, $attrs) { global $stack, $el_name; $el_name = $name; $stack[$el_name]['attributes'] = $attrs; }
function character_data_handler($parser, $data) { global $stack, $el_name; $stack[$el_name]['data'] = $data; }
$el_name = null; $stack = array(); $xml_parser = xml_parser_create(); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0); xml_set_element_handler($xml_parser, 'start_element_handler', null); xml_set_character_data_handler($xml_parser, 'character_data_handler'); if(!($data = xml_parse($xml_parser, $xml_src))) { exit('XML error: '.xml_error_string(xml_get_error_code($xml_parser)).' at line '.xml_get_current_line_number($xml_parser)); } xml_parser_free($xml_parser);
print_r($stack); |
набросал по-быстрому, но лучше это классом реализовать..
Спустя 35 минут, 42 секунды (2.06.2009 - 10:21) sergeiss написал(а):
kirik - спасибо, должен буду

Всё
работает, буду разбираться теперь, как же именно оно
работает 
И как
работать с этими данными.
Я пробовал ранее через эти функции сделать, но, видимо, что-то недопонял.
Спустя 3 месяца, 6 дней, 4 часа, 4 минуты, 54 секунды (8.09.2009 - 14:26) Guest написал(а):
sergeiss
please send me this file EricssonSpecificAttributes.4.7.xsd
Спустя 50 секунд (8.09.2009 - 14:27) Guest написал(а):
sergeiss
please send me this file EricssonSpecificAttributes.4.7.xsd
pdaniel_marule@yahoo.co.uk
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)