Уважаемые господа подскажите, что-то меня застопорило! Пытаюсь парсить xml при помощи DOM. Делаю элементарно следующее: $xmlfile = 'xml.xml'; $doc = new DOMDocument; $doc->Load($xmlfile); $spravka = $doc->getElementsByTagName(iconv('cp1251', 'utf-8', 'Справка')); А потом хочу внутри полученного узла смотреть дочерние теги и делаю следующее (помятуя о том, что у DOMElement есть метод getElementsByTagName): $fam = $spravka->item(1)->getElementsByTagName(iconv('cp1251', 'utf-8', 'Фамилия')); $fam_ = $fam->item(1)->NodeValue; } В итоге значение в $fam_ = NULL а не нужная мне фамилия! xml-на которую пытаюсь разобрать выглядит вот так: <Справка> <ОбщСвИЧ> <ФИО><Фамилия>АБРОСИМОВ</Фамилия> <Имя>ЛЕОНИД</Имя> <Отчество>ЕВГЕНЬЕВИЧ</Отчество> </ФИО> <Статус>1</Статус> <АдрМЖРФ><Индекс>188512</Индекс> <КодРегион>78</КодРегион> <Район/> <Город>хххх</Город> <НасПункт/> <Улица>хххх</Улица> <Дом>ххх</Дом> <Корпус/> <Кварт>ххх</Кварт> </АдрМЖРФ> </ПолучДох> </Справка> Подскажите что я делаю не правильно? Может это делается как-то по другому? Мне в конечном итоге хотелось бы получать элемент xml-ки справка и уже ходить по ее элементам! Вариант с childNode не рассматриваю по причине того что в нутри тэга <Справка> может быть разное количество дочерних тэгов!
А разметка правильная? <Справка> <ОбщСвИЧ> <ФИО><Фамилия>АБРОСИМОВ</Фамилия> <Имя>ЛЕОНИД</Имя> <Отчество>ЕВГЕНЬЕВИЧ</Отчество> </ФИО> <Статус>1</Статус> <АдрМЖРФ><Индекс>188512</Индекс> <КодРегион>78</КодРегион> <Район/> <Город>хххх</Город> <НасПункт/> <Улица>хххх</Улица> <Дом>ххх</Дом> <Корпус/> <Кварт>ххх</Кварт> </АдрМЖРФ> </ПолучДох> </Справка>
приведённый код xml-ем не является, что бы там не говорил минфин. > Разметка в самом xml правильная, просто видимо я вставил не совсем удачный курок xml что ещё ты забыл нам рассказать?
бугога, минфин жжот.. HTML: <?xml version="1.0" encoding="windows-1251"?> <НДФЛ2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсФорм="4.00001" ВерсПрог="4.214" ИдФайл="ДОХОД_2НДФЛ_1111_1111111111111111111_20070115_1"> и так далее для тех кто не в курсе: это не является "правильно составленным" xml-ем и должно отвергаться любым вменяемым xml парсером.
хз почему. предположу, что libxml предназначен для парсинга именно xml, а не yaml, bbcode или "формата минфина"
sidmal С кодировками точно все правильно? Ну и правильней было бы применять xpath dark-demon Мы с Олегом уже спорили на тему допустимости кириллицы в именах тегов и атрибутов. В спецификации запрета на использование символов кириллицы я не нашел. libxml тоже не против: все прекрасно работает. ЗЫ: с минфином я никак не связан и, в общем-то, против использования кириллицы в именах тегов и иной кодировки, нежели utf-8. ЗЫЫ: Зачем они устанавливают namespace, который ни разу не используется - мне тоже непонятно.
С кодировками точно все правильно (спасибо вашим советам). А подскажите, пожалуйста, как можно использовать xpath, чтобы получать доступ к любому тегу внутри <справка>
Да нормально все работает PHP: <?php $x = new DOMDocument(); $x->load('xml.xml'); $xp = new DOMXPath($x); $fs = $xp->query('/НДФЛ2/Справка/ПолучДох/ФИО/Фамилия'); foreach ($fs as $f) echo $f; ?>