2012-05-24 7 views
1

저는 XML 파일에 데이터를 표시하는 프로젝트 작업을하고 있습니다. (그것은 API와 같은 종류입니다). 필자는 PHP로 XML을 구문 분석하는 방법과 PHP로 XML 파일을 만드는 방법을 알고 있지만 함께 작동하지는 않습니다. :)PHP 파일을 XML 파일로 구문 분석 하시겠습니까?

기본적으로 두 파일 : parse.phpxml.php이 있습니다.

xml.php grab 정보를 MySQL 데이터베이스에서 가져 와서 XML로 출력합니다.

parse.php로드하고 xml.php을 구문 분석하여 HTML로 출력합니다.

parse.php을 실행하면 xml.php이로드되지 않습니다. 그러나 출력 된 XML (xml.php)을 복사하여 xml.xml 파일로 저장 한 다음 (parse.php의 파일 이름을 'xml.xml'로 변경하면) 작동합니다. 나는 정말 어떤 도움을 주셔서 감사합니다. parse.php의

내용 : xml.php의

<?php 

    $doc = "xml.php"; 

    $doc = @simplexml_load_file($doc) or die("Server Error: Recipe not found!"); 

    $title = $doc->title; 

    echo $title 

?> 

콘텐츠 :

<?php 

    header("Content-type: text/xml"); 

    $dbc = mysql... //gets data from database 

    echo "<!DOCTYPE..."; //xml stuff here 

    echo "<title>" . $dataFromMySQL . "</title>"; 

?> 

데이터베이스 연결이 작동하고, 그게 문제가 아니에요 그래서 XML에서 DOCTYPE은 괜찮습니다.

다시 PHP를 사용하여 XML을 동적으로 생성 할 때만 문제가 발생합니다. .XML 파일 인 경우 제대로 작동합니다.

아무도 도와 줄 수 있습니까?

감사합니다.

+0

당신은 XML 생성 코드를 함수로 작성해야합니다. 처리 할 프로그램 파일에 include가 포함 된 코드를로드하고 해당 함수를 호출하여 XML 내용을 가져와야합니다. 당신이하려는 일은 혼란입니다. – jsbueno

답변

3
@simplexml_load_file($doc); 

여기가 귀하의 문제입니다. 이것은 xml.php을 실행하지 않지만 작성한 PHP 코드 인 해당 파일을 XML로 구문 분석하려고 시도합니다. 분명히 (XML이 아니기 때문에) 이것은 작동하지 않을 것입니다.

출력을 xml.php에서 parse.php으로 가져 오는 방법을 찾아야합니다.

$xml .= 통화로 모든 echo 통화를 변경하는 것이 작업을 수행 할 수있는 쉬운 방법

parse.php에 단순히 include xml.php.

// xml.php 
$xml = ''; 
$xml .= "<!DOCTYPE..."; //xml stuff here 

$output .= "<title>" . $dataFromMySQL . "</title>"; 

// parse.php 
include('xml.php'); 

simplexml_load_string($xml); 

여기서 문제는 오류 억제 연산자 @을 사용하는 어리 석음을 나타냅니다. 당신이 그것을 사용하지 않았다면, PHP는 당신에게 문제가 무엇인지를 깨닫는데 도움이되었을 다양한 오류를 보여 줬을 것입니다.


부록 : 가장 좋은 방법은 실제로 길을 따라 무의미한 XML 단계에 대해 잊지 그냥 HTML로 데이터베이스 출력을 변환하는 것을 나에게 발생합니다.

+0

이것은 잘 작동합니다! Caleb – Caleb

+0

@ Caleb 하나의 파일에서 데이터를 얻지 못하고 데이터를 사용하는 두 개의 파일을 HTML로 변환하고 다른 파일을 XML로 변환 할 이유가 없습니다. 그것은 관심사 분리라고하며 좋은 코딩 실습의 기본 요소 중 하나입니다. – lonesomeday

+0

좋습니다! 모두의 빠르고 (유용한) 답장을 보내 주셔서 감사합니다. – Caleb

5

simplexml_load_file 실제로 xml.php 파일의 PHP 내용을로드하려고 시도합니다. 먼저 해당 파일을 실행하지 않습니다.

ob_start(); 
include 'xml.php'; 
$xml = ob_get_clean(); 

$doc = simplexml_load_string($xml); 
//... 

참고 : 당신은 약간의 재 작성을하거나 추한 솔루션을 사용할 필요가 내가 더 잘 @의 lonesomeday의 제안 된 솔루션을 좋아, 그냥 더 재 작성이 필요합니다. 당신이 xml.php를 다시 작성하지 않고이 작업을 수행하려면

+0

아주 잘 작동합니다! 고맙습니다! – Caleb

1

, 당신은 PHP가 URL을 통해 액세스하여 파일을 처리 얻을 수 있습니다 :

$doc = file_get_contents("http://localhost/xml.php"); 
+0

'xml.php'을 다시 작성하지 않고 이것을하고 싶다면 [Explosion Pills 's answer] (http://stackoverflow.com/a/10743053/417562)를 사용하십시오. 'file_get_contents'로 이것을하면 (불필요한 HTTP 요청을하고 페이지를 상당히 느려지 게하는) 매우 빈약 한 방법입니다. – lonesomeday

0

을 당신은 말 그대로 로컬 파일을로드하고 있습니다. 코드를 평가하지 않으면 코드가 실행되지 않으므로 코드 자체 만 얻습니다.

CURL을 사용하여 HTTP를 통해 xml.php를 다운로드하거나 xml.php의 XML 생성 구성 요소를 단순히 포함하고 실행할 수있는 호출 가능한 함수로 만들 수 있습니다.

parse.php :

<?php 
    include('xml.inc'); 

    $doc = @simplexml_load_string(xml_function()) or die("Error"); 
    echo $doc->title; 

xml.php :

<?php 
    include('xml.inc'); 

    header("Content-type: text/xml"); 
    echo xml_function(); 

xml.inc :

<?php 
    function xml_function() { 
    $dbc = mysql... //gets data from database 
    $xml = "<!DOCTYPE..."; //xml stuff here 
    $xml .= "<title>" . $dataFromMySQL . "</title>"; 
    return $xml; 
    } 

하지만 ... 심지어는 솔직히 바보 같다, 당신을 두 출력 방법을 동일한 데이터에 연결하고 생성/구문 분석 단계를 건너 뛸 수 있습니다. HTML/XML을 조건부로 간단히 출력하십시오.

+0

또한 생성 XML은 XML 모양의 문자열을 생성하지 않습니다. DOM을 사용하십시오. – lotyrin

0

그냥 컴퓨터에 실행할 코드를 작성할 필요가없는 embed string mysql 함수를 사용하여 mysql 서버가 모든 작업을 수행하도록합니다.

SUBSTRING(page, INSTR(page, '<title>')+7,(INSTR(page, '</title>'))-(INSTR(page, '<title>')+7) )

업데이트 URL2 세트 타이틀 = SUBSTRING (페이지 INSTR (페이지, '') +7 (INSTR (페이지, '')) - (INSTR (페이지, ') +7))

또는 테스트

SELECT SUBSTRING (페이지 INSTR (페이지, '') +7 (INSTR (페이지, ''))에 의해 - (INSTR (페이지 ') + 7)), 페이지 FROM url2 WHERE url = 'http://en.wikipedia.org/wiki/File:Nag_Nathaiya_festival_in_Varanasi.jpg';