[php] PHP를 사용하여 XML 파일을 동적으로 생성하는 방법은 무엇입니까?

런타임에 XML 파일을 동적으로 생성해야합니다. PHP를 사용하여 아래 XML 파일을 동적으로 생성하는 데 도움을주십시오.

<?xml version="1.0" encoding="UTF-8"?>
<xml>
 <track>
     <path>song1.mp3</path>
     <title>Track 1 - Track Title</title>
 </track>
 <track>
     <path>song2.mp3</path>
     <title>Track 2 - Track Title</title>
 </track>
 <track>
     <path>song3.mp3</path>
     <title>Track 3 - Track Title</title>
 </track>
 <track>
     <path>song4.mp3</path>
     <title>Track 4 - Track Title</title>
 </track>
 <track>
     <path>song5.mp3</path>
     <title>Track 5 - Track Title</title>
 </track>
 <track>
     <path>song6.mp3</path>
     <title>Track 6 - Track Title</title>
 </track>
 <track>
     <path>song7.mp3</path>
     <title>Track 7 - Track Title</title>
 </track>
 <track>
     <path>song8.mp3</path>
     <title>Track 8 - Track Title</title>
 </track>



답변

SimpleXMLElement를 사용 합니다.

<?php

$xml = new SimpleXMLElement('<xml/>');

for ($i = 1; $i <= 8; ++$i) {
    $track = $xml->addChild('track');
    $track->addChild('path', "song$i.mp3");
    $track->addChild('title', "Track $i - Track Title");
}

Header('Content-type: text/xml');
print($xml->asXML());


답변

PHP에서 XML 문서를 생성하려면 DOMDocument 클래스를 인스턴스화하고 자식 노드를 생성 한 후이 노드를 문서 트리의 올바른 분기에 추가해야합니다.

참고로 http://it.php.net/manual/en/book.dom.php 를 읽을 수 있습니다

이제 아래 코드를 간단히 살펴 보겠습니다.

  • 2 행에서 빈 xml 문서를 만듭니다 (xml 버전 (1.0) 및 인코딩 (utf8) 만 지정)
  • 이제 xml 트리를 채워야합니다.
    • xmlnode를 만들어야합니다 (5 행)
    • 올바른 위치에 추가해야합니다. 우리는 루트를 만들고 있으므로 이것을 domdocument에 직접 추가합니다.
    • create element는 요소를 노드에 추가하고 삽입 된 노드를 반환합니다. 트랙 노드를 루트 노드에 추가하기 위해이 참조를 저장합니다 (XML이라고도 함).

이것들은 기본이며, 한 줄로 노드를 만들고 추가 할 수 있습니다 (예 : 13 번째) .dom api로 다른 많은 일을 할 수 있습니다. 너하기에 달렸다.

<?php
    /* create a dom document with encoding utf8 */
    $domtree = new DOMDocument('1.0', 'UTF-8');

    /* create the root element of the xml tree */
    $xmlRoot = $domtree->createElement("xml");
    /* append it to the document created */
    $xmlRoot = $domtree->appendChild($xmlRoot);

    $currentTrack = $domtree->createElement("track");
    $currentTrack = $xmlRoot->appendChild($currentTrack);

    /* you should enclose the following two lines in a cicle */
    $currentTrack->appendChild($domtree->createElement('path','song1.mp3'));
    $currentTrack->appendChild($domtree->createElement('title','title of song1.mp3'));

    $currentTrack->appendChild($domtree->createElement('path','song2.mp3'));
    $currentTrack->appendChild($domtree->createElement('title','title of song2.mp3'));

    /* get the xml printed */
    echo $domtree->saveXML();
?>

편집 : 다른 힌트 하나 : XML을 인쇄하는 대신 xmldocument (dom 문서 하나 또는 simplexml 하나)를 사용하는 주요 이점은 xmltree를 xpath 쿼리로 검색 할 수 있다는 것입니다


답변

이를 수행하는 가장 쉬운 방법은 다음과 같습니다.

<?php
// Send the headers
header('Content-type: text/xml');
header('Pragma: public');
header('Cache-control: private');
header('Expires: -1');
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";

echo '<xml>';

// echo some dynamically generated content here
/*
<track>
    <path>song_path</path>
    <title>track_number - track_title</title>
</track>
*/

echo '</xml>';

?>

.php로 저장


답변

FluidXML 을 사용하면 XML을 매우 쉽게 생성 할 수 있습니다.

$tracks = fluidxml('xml');

$tracks->times(8, function ($i) {
    $this->add([
        'track' => [
            'path'  => "song{$i}.mp3",
            'title' => "Track {$i} - Track Title"
        ]
    ]);

});

https://github.com/servo-php/fluidxml


답변

Tiny But Strong 템플릿 시스템을 살펴보십시오 . 일반적으로 HTML 템플릿에 사용되지만 XML 파일과 작동하는 확장명이 있습니다. 하나의 코드 파일과 두 개의 템플릿 파일 (htm 및 xml)을 가질 수있는 보고서를 작성하는 데 광범위하게 사용하며 사용자는 보고서를 화면 또는 스프레드 시트로 보낼지 여부를 선택할 수 있습니다.

또 다른 장점은 XML을 처음부터 코딩 할 필요가 없다는 것입니다. 경우에 따라 매우 큰 복잡한 스프레드 시트를 내보내고 싶었지만 모든 내보내기를 코딩하는 대신 기존 스프레드 시트를 저장하는 것만으로도 필요한 모든 내보내기 데이터 출력이 필요한 코드 태그에서 xml 및 대체. 빠르고 효율적인 작업 방법입니다.


답변

$query=mysql_query("select * from tablename")or die(mysql_error());
$xml="<libraray>\n\t\t";
while($data=mysql_fetch_array($query))
{

    $xml .="<mail_address>\n\t\t";
    $xml .= "<id>".$data['id']."</id>\n\t\t";
    $xml .= "<email>".$data['email_address']."</email>\n\t\t";
    $xml .= "<verify_code>".$data['verify']."</verify_code>\n\t\t";
    $xml .= "<status>".$data['status']."</status>\n\t\t";
    $xml.="</mail_address>\n\t";
}
$xml.="</libraray>\n\r";
$xmlobj=new SimpleXMLElement($xml);
$xmlobj->asXML("text.xml");

간단하게 데이터베이스에 연결하면 프로젝트 폴더에 test.xml 파일이 생성됩니다.


답변