草庐IT

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

coder 2024-07-04 原文

我对 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 - XML - 显示打开和关闭而不是空元素的更多相关文章

  1. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  4. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  5. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  6. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  7. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  8. ruby - 如何关闭 ruby​​ gem "Spreadsheet?"中的文件 - 2

    下面的代码在我第一次运行它时就可以正常工作:require'rubygems'require'spreadsheet'book=Spreadsheet.open'/Users/me/myruby/Mywks.xls'sheet=book.worksheet0row=sheet.row(1)putsrow[1]book.write'/Users/me/myruby/Mywks.xls'当我再次运行它时,我会收到更多消息,例如:/Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:11

  9. ruby - 在哈希的键数组中追加元素 - 2

    查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用

  10. ruby-on-rails - 复数 for fields_for has_many 关联未显示在 View 中 - 2

    目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi

随机推荐