Вопрос о сохранении файла в php - PullRequest
4 голосов
/ 23 декабря 2010

Я использовал следующий код для выполнения XSLT в php:

 # LOAD XML FILE 
 $XML = new DOMDocument(); 
 $XML = simplexml_load_file("images/upload/source.xml");

 # START XSLT 
 $xslt = new XSLTProcessor(); 
 $XSL = new DOMDocument();  
 $XSL->load( 'xsl/transfer.xsl', LIBXML_NOCDATA); 
 $xslt->importStylesheet( $XSL ); 

 #PRINT   
 print $XML->saveXML();
 print $XML->save("newfile.xml") ;

Код довольно прост, нам нужно загрузить исходный XML-файл, а затем загрузить таблицу стилей, и это действительно так.на самом деле работает.

Код, который вызывает проблемы, - это последняя строка:

print $XML->save("newfile.xml") ;

после выполнения которого я получил ошибку "Неустранимая ошибка: вызов неопределенного метода SimpleXMLElement :: save ()".Но, на самом деле, я следовал здесь учебнику: http://devzone.zend.com/article/1713.

Может быть, я что-то напортачил, кто-нибудь может дать мне подсказку?заранее спасибо.

Следуя советам ваших ребят, я изменил код следующим образом:

 # LOAD XML FILE 
 $XML = new DOMDocument(); 
 $XML->load("images/upload/source.xml");

 # START XSLT 
 $xslt = new XSLTProcessor(); 
 $XSL = new DOMDocument();  
 $XSL->load( 'xsl/transfer.xsl', LIBXML_NOCDATA); 
 $xslt->importStylesheet( $XSL ); 

 #PRINT    
  print $xslt->transformToXML( $XML );

теперь корректно преобразованный XML отображается в браузере, я попробовал несколько способовно все еще не мог понять, как напечатать этот результат в файл вместо отображения в браузере, любая помощь приветствуется, заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 23 декабря 2010

Вы меняете способ определения $XML, просто вызовите метод load для $XML вместо simplexml_load_file:

$XML = new DOMDocument(); 
$XML->load("images/upload/source.xml");

Нет причин длявсе для использования simplexml, поскольку обработка XSLT выполняется с помощью DOMDocument.Так что просто замените эту строку, и у вас все получится ...

1 голос
/ 23 декабря 2010
$XML = new DOMDocument(); 
$XML = simplexml_load_file("images/upload/source.xml");

Вы говорите , что $XML - это DOMDocument , а затем вы заменяете его на SimpleXMLElement в строке 2

Используйте

$XML = new DOMDocument(); 
$XML->load("images/upload/source.xml");

вместо

1 голос
/ 23 декабря 2010
$XML = new DOMDocument(); 
$XML = simplexml_load_file("images/upload/source.xml");

Сначала вы сохраняете DOMDocument в $XML, а затем заменяете его SimpleXMLElement. DOMDocument имеет метод save, а SimpleXMLElement - нет.

Прием: не смотрел учебник, поэтому я не знаю, почему / если он работает.

0 голосов
/ 23 декабря 2010

Проблема:

$XML = new DOMDocument(); 
$XML = simplexml_load_file("images/upload/source.xml");

Вы создаете DOMDocument, который затем перезаписываете объект SimpleXMLElement.Первая строка - мертвый код.Вы вообще не используете его, поскольку переписываете его в следующем операторе.

save - это метод в DOMDocument.asXML($file) является эквивалентом для SimpleXML (или saveXML($file), который является псевдонимом.

Если вы посмотрите на учебник, это ясно:

$xsl = new DomDocument();
$xsl->load("articles.xsl");
$inputdom = new DomDocument();
$inputdom->load("articles.xml");

Итак, если вы используете simplexml_load_file, тогда вы на самом деле не следуете учебнику.

...