1

你好,我又来了。在我的最后一个问题XML 解析错误 (RESOLVED) XML Sample确实帮助我了解更多信息之后。我正在向另一面砖墙奔跑。

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

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

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

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();
?>

提前谢谢,再次...

4

2 回答 2

0

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

$xml->openURI(__DIR__ . 'file.xml');
于 2021-03-29T08:50:36.403 回答
0

我建议您使用 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');- 如果您想创建一个新目录并将您的 .xml 文件保存到其中,然后您可以这样做-

$filename = 'D:/foldertobecreated/filetobesaved.xml';
$dirname = dirname($filename);
if (!is_dir($dirname))
{
    mkdir($dirname, 0755, true);
}

$fp = fopen("$dirname\\filetobesaved.xml",'w');
于 2016-06-23T08:21:01.133 回答