【发布时间】:2014-05-22 03:02:56
【问题描述】:
我正在使用 PHP/PDO 查询我的 MySQL 表并将所有记录作为格式化的 XML 返回。
我 - 正在获得我的输出.. 但它并不完全符合我的预期,所以我在这里询问这是否正常?或者(更有可能)我做错了什么。
此 PHP 脚本将被另一个(现有)基于 Adobe Flash 的项目使用。 (它目前正在使用一个平面 .xml 文件来加载......我一直在努力升级这个项目的第一步(最终远离 Flash),所以它会提取它的数据/xml 提要来自数据库。
当我直接在浏览器中加载 .php 脚本时......我看到屏幕上打印了所有“值”(没有 XML 标记)。但是,如果我查看页面源代码,则会发现 XML 标记存在/存在。 (我正在使用 FireFox)..但是应用了语法突出显示(默认我猜 FireFox 对源代码有彩色突出显示?)..
无论如何.. 我提到它是因为我有一个红色标签,并且它的匹配(关闭)标签是正常颜色的?让我相信我发生了某种错误?
XML 源示例:
<?xml version="1.0" encoding="UTF-8"?>
<saberFonts>
<entry submissionDate="2013-02-18 00:00:00">
<fontName>Episode I QGJ </fontName>
<fontCreator>Novastar</fontCreator>
<fontFormat>.wav</fontFormat>
<optimized>Plecter</optimized>
<fontPrice>6.50</fontPrice>
<fontImage>wav_cf.png</fontImage>
<fontURL><![CDATA[https://www.e-junkie.com/ecom/gb.php?c=cart&i=NS-EPIQGJ_PLECTER-.wav&cl=174914&ejc=2]]></fontURL>
<description><![CDATA[An EPI QGJ font]]></description>
<piracyVid></piracyVid>
<demoLink height="315" width="420" title="">http://www.youtube.com/v/3IbzyyHo0o4?version=3&hl=en_US&rel=0</demoLink>
</entry>
etc..etc..etc (more entry nodes, same structure)..
</saberFonts>
源中的第一个标签/节点名称是 RED,而结尾是正常的黑色/紫色??
问题1:这正常吗?看到屏幕上打印的值?没有任何 XML 标签/结构? (并且 XML 结构仅在源代码中?)
问题 2:突出“问题”的语法?为什么1个标签是红色的,另一个是正常的?我所有的 CDATA 值都是红色的。但是第一个/开始标签?
这是我用来查询和构建 XML“字符串”输出的代码。
<?php
session_start();
$host_name = 'localhost';
$db_name = 'test';
$user_name = 'root';
$password = '';
$table = 'fontentries';
try {
$conn=new PDO("mysql:host=$host_name; dbname=$db_name", $user_name , $password);
//$conn->exec("SET CHARACTER SET utf8");
} catch (PDOException $e) {
echo 'Connection -not- made<br/>';
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
$getAll_query = "SELECT * FROM `fontentries` WHERE active != 0;";
$xml_statement = $conn->prepare($getAll_query);
$xml_statement->execute();
$xml_output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$xml_output .= "<saberFonts>\n";
foreach ($xml_statement->fetchAll(PDO::FETCH_ASSOC) as $row) {
//get/set $row data
$fontID=$row['id'];
$date_entered=$row["date_entered"];
$font_name=$row["font_name"];
$font_maker=$row["font_maker"];
$font_format = $row["font_format"];
$optimized_for= $row["optimized_for"];
$font_price=$row["font_price"];
$font_image = $row["font_image"];
$font_url=$row["font_url"];
$description=$row["description"];
$youtube_id=$row["youtube_id"];
$ip_address = $_SERVER["REMOTE_ADDR"];
$active = $row["active"];
$custom_config = $row['custom_config'];
$led_txt = $row['led_txt'];
$xml_output .= "\t<entry submissionDate=\"".$date_entered."\">\n";
$xml_output .= "\t\t<fontName>" . $font_name . "</fontName>\n";
$xml_output .= "\t\t<fontCreator>" . $font_maker . "</fontCreator>\n";
$xml_output .= "\t\t<fontFormat>" . $font_format . "</fontFormat>\n";
$xml_output .= "\t\t<optimized>" . $optimized_for . "</optimized>\n";
$xml_output .= "\t\t<fontPrice>" . $font_price . "</fontPrice>\n";
$xml_output .= "\t\t<fontImage>" . $font_image . "</fontImage>\n";
$xml_output .= "\t\t<fontURL><![CDATA[https://www.e-junkie.com/ecom/gb.php?c=cart&i=" . $font_url . "&cl=174914&ejc=2]]></fontURL>\n";
$xml_output .= "\t\t<description><![CDATA[" . $description . "]]></description>\n";
$xml_output .= "\t\t<piracyVid></piracyVid>\n";
$xml_output .= "\t\t<demoLink height=\"315\" width=\"420\" title=\"\">http://www.youtube.com/v/" . $youtube_id . "?version=3&hl=en_US&rel=0</demoLink>\n";
$xml_output .= "\t</entry>\n";
}
$xml_output .= "</saberFonts>";
echo $xml_output;
?>
此时,我不确定为什么会得到这些结果?想我会在这里发帖以从那些有更多经验的人那里获得一些帮助/答案。
谢谢!
【问题讨论】:
-
我强烈建议您使用实际的 XML 库(如 DOM 或 SimpleXML)构建您的 XML 文档。
-
谢谢!但是,如果我知道如何,.. 我不会发布。 ;) 不过,我很欣赏“评论”。