Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не работает функция JOIN при обработке файла xml
 
 автор: Lulu   (05.03.2007 в 23:25)   письмо автору
 
 

Помогите, плиз, вопрос вот в чем: настроила Apache и PHP по инструкции, еще добавила модуль XML. Есть файл person.xml содержания:

<?xml version="1.0" encoding="utf-8"?>
<collection>
<person id="10">
<name>
<first>Nick</first>
<last>Petrov</last>
</name>
<birth>
<day>23</day>
<month>12</month>
<year>89</year>
<email>nick@ngs.ru</email>
</birth>
</person>
<person id="20">
<name>
<first>Bob</first>
<last>Ivanov</last>
</name>
<birth>
<day>03</day>
<month>05</month>
<year>90</year>
<email>bob@ngs.ru</email>
</person>
</collection>

и скрипт обрабатывающий этот файл x.php

<?php
$xmlstr=join(' ',file('person.xml'));
if(!$dom=domxml_open_mem($xmlstr)) {
echo "oshibka";
exit;
}
print_r($dom);
echo "<hr>";
$root=$dom->document_element();
print_r($root);
echo "<hr>";
?>

При запуске выдает ошибку:

Warning: file(person.xml) [function.file]: failed to open stream: No such file or directory in C:\www\Apache2.2\htdocs\x.php on line 2

Warning: join() [function.join]: Bad arguments. in C:\www\Apache2.2\htdocs\x.php on line 2

Fatal error: Call to undefined function domxml_open_mem() in C:\www\Apache2.2\htdocs\x.php on line 3

В чем причина??? почему он не считывает файл person.xml??

   
 
 автор: Саня   (05.03.2007 в 23:34)   письмо автору
 
   для: Lulu   (05.03.2007 в 23:25)
 

В данном случае XML-файл должен лежать в папке со скриптом.
И ещё, PHP у вас какой версии?

   
 
 автор: Lulu   (05.03.2007 в 23:39)   письмо автору
 
   для: Саня   (05.03.2007 в 23:34)
 

PHP5 стоит, а файлы в одной папке лежат

   
 
 автор: bronenos   (05.03.2007 в 23:35)   письмо автору
 
   для: Lulu   (05.03.2007 в 23:25)
 

не может найти
зы, мне кажется удобнее использовать file get contents

   
 
 автор: Lulu   (05.03.2007 в 23:40)   письмо автору
 
   для: bronenos   (05.03.2007 в 23:35)
 

я пока сама не пишу скрипты, а только проверяю из учебника, смотрю как работают

   
 
 автор: Саня   (06.03.2007 в 00:28)   письмо автору
 
   для: Lulu   (05.03.2007 в 23:40)
 

К ошибке "failed to open stream: No such file or directory" может привести опечатка в имени файла. Проследите, чтобы в скрипте имя открываемого файла совпадало с именем существующего файла.

> $xmlstr=join(' ',file('person.xml'));
Так делают только извращенцы. Хотя нет... извращенцы делают так:
<?
$file 
file("some_file.txt");
$buffer "";
for ( 
$i 0$i count($file); $i++ ) {
  
$buffer .= $file[$i];
}
Так как вы только учитесь, вам это простительно. Однако запомните: чтобы прочитать весь файл в переменную можно и нужно пользоваться функцией file_get_contents(), которая работает значительно быстрее тех двух ужасных конструкций.

И ещё, domxml в пятой версии php нету. Вместо него обычный DOM. Пример:
<?
$xmlstr 
file_get_contents('person.xml');
$dom DOMDocument::loadXML($xmlstr);

$person $dom->GetElementsByTagName("person");
for ( 
$i 0$i $person->length$i++ ) {
  
$child $person->item($i)->childNodes;
  
$name  $child->item(1)->childNodes;
  
$birth $child->item(3)->childNodes;

  print 
"Имя: ".
        
$name->item(1)->nodeValue." ".
        
$name->item(3)->nodeValue."<br/>".
        
"Дата рождения: ".
        
$birth->item(1)->nodeValue."/".
        
$birth->item(3)->nodeValue."/".
        
$birth->item(5)->nodeValue."<br/>".
        
"Email: ".$birth->item(7)->nodeValue."<br/><br/>";
}
Этим скриптом я разобрал ваш XML-файл.

Кстати, у вас пропущен закрывающий тег </birth>:
...
<birth>
<day>03</day>
<month>05</month>
<year>90</year>
<email>bob@ngs.ru</email>
в этом месте пропущен тег </birth>
</person>
</collection>

   
 
 автор: Lulu   (06.03.2007 в 09:41)   письмо автору
 
   для: Саня   (06.03.2007 в 00:28)
 

Огромное спасибо за помощь!!!!! Буду учиться.

   
 
 автор: ZuArt   (06.03.2007 в 09:47)   письмо автору
 
   для: Lulu   (06.03.2007 в 09:41)
 

Кстать, а логично ли помещать мыло как подраздел даты рождения??? =) может логичнее вывести этот параметр на один уровень с ФИО и ДР, или вообще создать отдельную ветку на уровне ФИО? Но это так - предложение по структуризации самого "хранилища" =)


...
</name>
<contacts>
<mail>...</mail>
<phone>...</phone>
...
</contacts>

   
 
 автор: Lulu   (06.03.2007 в 21:07)   письмо автору
 
   для: ZuArt   (06.03.2007 в 09:47)
 

согласимся!!!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования