XMLWrite将文件输出到与php脚本相同的目录

时间:2013-10-15 11:54:37

标签: php mysql save xmlwriter

你好,我再一次。在我的上一个问题XML parsing error (RESOLVED) XML Sample之后,这真的帮助我了解了更多。我正在另一个砖墙上奔跑。

我的问题: 我需要做的是在我的php文档所在的同一目录中写一个.xml文件。因此,当我执行脚本时,它应该自动将.xml文件保存到php文件所在的目录中。这可能吗?如何?

目前我正在尝试使用openURI输出文件,但是当我这样做时,我收到以下错误(翻译自荷兰语):

有趣的是,如果我使用php://输出,它会在浏览器中正确显示所有内容。

XML-Parse Error: no element found
Location: xml.php
Rownumber 1, column 1:

代码:

<?php
    //SELECTEER ALLES VAN DATABASE PROJECTEN
    $sql = "SELECT * FROM projecten ORDER BY id";
    $res = mysql_query($sql);

    //BEGIN XML
    $xml = new XMLWriter();
    $xml->openURI('file.xml');
    $xml->setIndentString ( '&#09;' );
    $xml->startDocument( '1.0', 'UTF-8', 'no' );
    $xml->setIndent(true);

    //FUNCTIE VOOR MAKKELIJKER INVOEREN
    function addNode( $xml, $NodeName, $Value ) {
    $xml->startElement( $NodeName );
    $xml->writeCData( $Value );
    $xml->endElement();      
    }

   //START HOOFD ELEMENT
   $xml->startElement('projecten');

    //WHILE LOOP DOOR DATABASE
    while ($row = mysql_fetch_assoc($res)) {

            //START PROJECT
            $xml->startElement('project');
            $xml->writeAttribute('id', $row['id']);

                addNode( $xml, "id", $row["id"] );
                addNode( $xml, "projectnaam", $row['projectnaam'] );
                addNode( $xml, "status", $row['status'] );
                addNode( $xml, "klantnaam", $row['klantnaam'] );
                addNode( $xml, "startdatum", $row['startdatum'] );
                addNode( $xml, "eindddatum", $row['einddatum'] );

            //EIND PROJECT
            $xml->endElement();
    }

    //EINDE HOOFD ELEMENT
    $xml->endElement();

    //EINDE DOCUMENT
    $xml->endDocument(); 
    header('Content-type: text/xml');
    $xml->flush();
?>

再次感谢,再次......

2 个答案:

答案 0 :(得分:1)

我建议你使用fopen。这是我的代码 -

<?php 
include('db.php');
$sql = "SELECT * FROM `data`";

$result = mysqli_query($conn,$sql);

$xml = new XMLWriter();
$xml->openMemory();
$xml->setIndent(true);
function addNode($xml,$NodeName,$Value){
    $xml->startElement($NodeName);
    $xml->writeCData($Value);
    $xml->endElement();

}
$xml->startElement('Details');
while($row = mysqli_fetch_assoc($result)){
    $xml->startElement('Data');
    $xml->writeAttribute('date',$row['date']);
    addNode($xml,"Id",$row["id"]);
    addNode($xml,"age",$row["age"]);
    addNode($xml,"Name",$row["name"]);
    $xml->endElement();
}
$xml->endElement();
$xml->endDocument();

$content = $xml->flush();

$fp = fopen("filetobesaved.xml",'w');
fwrite($fp,$content);
fclose($fp);
header('Content-type: text/xml');
echo $content;
?>

此代码将创建一个生成xml文件并将其保存在呈现php代码文件的同一文件夹中,并将其保存为名称filetobesaved.xml。如果不是w,则$fp = fopen("filetobesaved.xml",'w');将创建该文件exists- $filename = 'D:/foldertobecreated/filetobesaved.xml'; $dirname = dirname($filename); if (!is_dir($dirname)) { mkdir($dirname, 0755, true); } $fp = fopen("$dirname\\filetobesaved.xml",'w'); 如果您想创建一个新目录并将.xml文件保存到其中,那么您可以这样做 -

.carousel-active-thumb {
  border-bottom: 5px solid #000;
  padding: 5px;
  margin: 2px;
}

.carousel-thumb {
  border-bottom: 5px solid #fff;
  padding: 5px;
  margin: 2px;
}

.carousel-thumbnail-center {
  text-align: center;
}

.carousel-thumbnail-center ol {
  display: inline-block;
  padding: 0;
  /* For IE */
  zoom: 1;
  *display: inline;
}

.carousel-inner > .item > img {
  margin-left: auto;
  margin-right: auto;
  display: block;
  height: 350px;
  width: auto;
}

.carousel-active-thumb a img {
  height: 41px;
  width: auto;
}

.carousel-thumb a img {
  height: 41px;
  width: auto;
}

答案 1 :(得分:0)

另一种可能性是使用 __ DIR __ 给出 openURI 的绝对路径:

$xml->openURI(__DIR__ . 'file.xml');