php - XML - 显示打开和关闭而不是空元素

标签 php xml

我对 XML 几乎一无所知。这个脚本是为我们编写的...

我有一个脚本,可以从数据库中提取信息并创建 XML 文件。 如果拉出的字段为空/空,则它的格式如下:

<deal_id/>

我知道这是有效的,但我需要它的格式如下:

<deal_id></deal_id>

这是有问题的脚本。

<?php
//include global config
require("config.inc.php");
//include MySQL wrapper
require("Database.singleton.php");
// instantiate database
$db = Database::obtain(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
// define basic xml data
$xml_root = "<?xml version='1.0' encoding='UTF-8' ?>\n"."<store></store>";

$deal_id = $_REQUEST['deal_id'];

$result = new SimpleXMLElement($xml_root);

$img_path = "http://www.malldeals.com/admin/images/logos/deals/";
$img_na = "image_na.jpg";

if ($deal_id != '') {

$db->connect();

// get store and deal details
$sql_store_deal = "SELECT businesses.id, businesses.business_name, businesses.business_floor, businesses.business_near, businesses.business_phone, businesses.business_address, 
                businesses.business_city, businesses.latitude, businesses.longitude, deals.title AS deal_title, deals.id AS deal_id, deals.percent_off AS deal_discount, deals.sale_price AS deal_price,
                deals.orig_price AS deal_orig_price, deals.expiry_date AS deal_expires, deals.description AS deal_text,
                    (SELECT file_name
                    FROM images
                    WHERE images.deal_id = deals.id AND size_key = '1') AS thumb2,
                        (SELECT COUNT(poster_id)
                        FROM deals
                        WHERE poster_id=businesses.id) AS num_deals
                FROM businesses, deals
                WHERE deals.poster_id=businesses.id
                AND deals.id='".$db->escape($deal_id)."'";
//
$store_deal_details = $db->query_first($sql_store_deal);
$store_logo_url = ($store_deal_details[thumb2] != "") ? ($img_path.$store_deal_details[thumb2]) : $img_path.$img_na;

$result->addChild('id', $store_deal_details[id]);
$result->addChild('name', utf8_encode($store_deal_details[business_name]));
$result->addChild('floor', utf8_encode($store_deal_details[business_floor]));
$result->addChild('near', utf8_encode($store_deal_details[business_near]));
$result->addChild('phone', utf8_encode($store_deal_details[business_phone]));
$result->addChild('latitude', $store_deal_details[latitude]);
$result->addChild('longitude', $store_deal_details[longitude]);
$result->addChild('address', utf8_encode($store_deal_details[business_address]));
$result->addChild('city', utf8_encode($store_deal_details[business_city]));
$result->addChild('num_deals', $store_deal_details[num_deals]);

$deal_discount = floatval($store_deal_details[deal_discount]);
$deal_price = floatval($store_deal_details[deal_price]);
$deal_savings = floatval($store_deal_details[deal_orig_price]) - floatval($store_deal_details[deal_price]);

$result_deal = $result->addChild('deal');
$result_deal->addChild('deal_id', $store_deal_details[deal_id]);
$result_deal->addChild('title', xml_encode($store_deal_details[deal_title]));
$result_deal->addChild('discount', $deal_discount);
$result_deal->addChild('price', $deal_price);
$result_deal->addChild('savings', $deal_savings);
$result_deal->addChild('expires', $store_deal_details[deal_expires]);
$result_deal->addChild('text', xml_encode($store_deal_details[deal_text]));
$result_deal->addChild('image', $store_logo_url);

$db->close();
}
else {
$result->addChild('error', "Missing required parameters");
}

header("Content-Type: text/xml");
echo $result->asXML();

?>

最佳答案

您可以选择几个选项。

  1. 不要有空元素。

    $result->addChild('deal'); // <deal/>
    $result->addChild('deal', ''); // <deal></deal>
    
  2. 使用 LIBXML_NOEMPTYTAG ( docs ),它不适用于 SimpleXML(但可以轻松地将 DOM 与 SimpleXML 对象一起使用)。

    $doc = dom_import_simplexml($result)->ownerDocument;
    echo $doc->saveXML(NULL, LIBXML_NOEMPTYTAG);
    

关于php - XML - 显示打开和关闭而不是空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8249918/

相关文章:

php - 从数组中删除元素并从 0 重新索引

php - 如何在 where 子句中使用串联 [Codeigniter]

php - 比较两个字符串的最佳方法

javascript - 鼠标悬停时 SVG 比例 - 元素消失

javascript - 如何调用on_menu_about(); Odoo 9 中 UserMenu.js 的功能?

python - 使用 twisted 处理文件

mysql - CakePHP 将数据快照保存为 XML/JSON

php - session_start 无法创建 session ID

php - 防止flock引起的死锁

xml - 如何获取 RichTextBox 的内容?