我有一个包含 500 多个项目的长 xml 数据文件,它以这种形式出现:
<?xml version="1.0" encoding="ISO-8859-1"?>
<CATALOG>
<ITEM>
<TITLE>ITEM name</TITLE>
<TYPE>TYPE </TYPE>
<DESCIPTION>DESCIPTIONiliate Page CPM</DESCIPTION>
<PRICE>PRICE</PRICE>
<ITEM>http://mysite.com/item-link</ITEM>
</ITEM>
</CATALOG>
我在 php 页面中使用以下代码从 xml 文件导入数据:
<?php
$ITEMSS = new SimpleXMLElement('ITEMS.xml', null, true);
echo <<<EOF
<table width="100%" align="center" border="1" bordercolor="#0099ff" cellpadding="1" cellspacing="0">
<tr>
<th bgcolor="#66ccff"><span class="style4">ITEM Name</span></th>
<th bgcolor="#66ccff"><span class="style4">item TYPE </span></th>
<th bgcolor="#66ccff"><span class="style4">item DESCIPTION </span></th>
<th bgcolor="#66ccff"><span class="style4">item PRICE</span></th>
<th bgcolor="#66ccff"><span class="style4">link to item</span></th>
</tr>
EOF;
foreach($ITEMSS as $ITEMS) // loop through our DATAS
{
echo <<<EOF
<tr height="30" align=middle>
<td><a href="{$ITEMS->ITEM}" target="_blank"><span class="STYLE7">{$ITEMS->TITLE}</span></a></td>
<td><span class="STYLE8">{$ITEMS->TYPE}</span></td>
<td><span class="STYLE8">{$ITEMS->DESCIPTION}</span></td>
<td><span class="STYLE8">{$ITEMS->PRICE}</span></td>
<td><a href="{$ITEMS->ITEM}" target="_blank"><B><span class="STYLE7">cHECK IT OUT</span></B></a></td>
</tr>
EOF;
}
echo '</table>';
?>
我需要在循环中添加一个“if”语句以仅选择一些数据,如果“TYPE”具有特定值,它将显示该数据,否则将跳过它。
还需要添加分页系统,因为要列出 500 多个项目,我希望表格显示最大数量的项目,比如 25。
谢谢大家的帮助!
最佳答案
作为替代方案,您可以通过 xpath 仅选择(并处理)在 TYPE 元素中具有特定文本值的那些 ITEM 元素。 ,例如
<?php
$doc = new SimpleXmlElement(getData());
foreach($doc->xpath("//ITEM[TYPE='A']") as $item) {
echo $item->DESCIPTION, "\n";
}
function getData() {
return <<< eox
<?xml version="1.0" encoding="ISO-8859-1"?>
<CATALOG>
<ITEM>
<TITLE>item 1</TITLE>
<TYPE>A</TYPE>
<DESCIPTION>desc1</DESCIPTION>
<PRICE>price1</PRICE>
<ITEM>item1-link</ITEM>
</ITEM>
<ITEM>
<TITLE>item x</TITLE>
<TYPE>B</TYPE>
<DESCIPTION>descx</DESCIPTION>
<PRICE>pricex</PRICE>
<ITEM>itemx-link</ITEM>
</ITEM>
<ITEM>
<TITLE>item y</TITLE>
<TYPE>B</TYPE>
<DESCIPTION>descy</DESCIPTION>
<PRICE>pricey</PRICE>
<ITEM>itemy-link</ITEM>
</ITEM>
<ITEM>
<TITLE>item 2</TITLE>
<TYPE>A</TYPE>
<DESCIPTION>desc2</DESCIPTION>
<PRICE>price2</PRICE>
<ITEM>item2-link</ITEM>
</ITEM>
</CATALOG>
eox;
}
打印
desc1
desc2
-- 编辑:具有一些分页功能--
<?php
define('ITEMS_PER_PAGE', 10);
$page = 1; // =intval($_GET['page']);
$posMin = $page*ITEMS_PER_PAGE;
$posMax = ($page+1)*ITEMS_PER_PAGE;
$doc = new SimpleXmlElement(getData());
foreach($doc->xpath("(//ITEM[TYPE='A'])[position()>=$posMin and position()<$posMax]") as $item) {
echo $item->DESCIPTION, "\n";
}
function getData() {
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>
<CATALOG>';
for($i=0; $i<100; $i++) {
$type = 0===$i%2 ? 'A':'B';
$xml .= "
<ITEM>
<TITLE>item $i</TITLE>
<TYPE>$type</TYPE>
<DESCIPTION>desc $i</DESCIPTION>
<PRICE>price $i</PRICE>
<ITEM>item{$i}-link</ITEM>
</ITEM>";
}
$xml.='</CATALOG>';
return $xml;
}
函数 getData() 只是一些返回一些 xml 数据的样板。
要了解 xpath 查询,请阅读(好的)xpath 教程,例如,请参阅Using XPATH to access XML elements (was: Good tutorial to learn xpath)
关于php - 流量控制取决于 xml 元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352300/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
查看我的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([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时