我已将PHP代码包含在我正从中检索数据的XML文件片段中。
我想显示XML文件中的数据,类似于我将其用作ID的方式。在ID中,它使用ID作为索引,但我发现它不能作为日期工作。
我的第一个想法是只使用xPath并将其保留为此但我想格式化我的数据以保持一致性。
作为PHP和XML的初学者,我们将非常感谢能够进一步学习语言或格式的任何见解或文档。
我遇到的问题是找到已输入的相关属性的索引值,并以ID搜索等格式单独输出。
<?php
if($_GET["SearchChoice"] == "ID Search"){ #WORKING FINDS THE VALUE OF DATA NEEDED
$xml=simplexml_load_file("XMLtest.xml") or die("Error: Cannot create object");
$passID = intval($_GET["IDsend"]);
if ($passID !== 0){
$passID = $passID - 1;
}
#echo $xml['date'];
#echo var_dump((string)$xml['date']);
$attr = $xml->finances[$passID]->attributes();
echo "Date: ";
echo $attr['date'];
echo $xml->finances[$passID]->day . ",<br>Projection: ";
echo $xml->finances[$passID]->projection . ",<br>Recommended Staff: ";
echo $xml->finances[$passID]->recommendedStaff . ",<br>Staff Wages: ";
echo $xml->finances[$passID]->staffWages . ",<br>Actual: ";
echo $xml->finances[$passID]->actual . "<br>";
}
elseif($_GET["SearchChoice"] == "Date Search") {
$xml=simplexml_load_file("XMLtest.xml") or die("Error: Cannot create object");
$passDate = strval($_GET["DateSend"]);
$nodes = $xml->xpath("/january/finances[@date='". $passDate . "']"); # Instead of xpath possiblity: loop through to find date then output it similar to ID Search?
print_r($nodes);
}
else {
echo "Error 1 <br>";
echo $_GET["SearchChoice"];
}
以下是XML的一部分:
<?xml version="1.0" encoding="UTF-8"?>
<january>
<finances id="1" date="01-01-2016">
<projection>414</projection>
<recommendedStaff>20</recommendedStaff>
<staffWages>100</staffWages>
<actual>250</actual>
</finances>
<finances id="2" date="02-01-2016">
<year>2016</year>
<month>01</month>
<day>02</day>
<projection>124</projection>
<recommendedStaff>8</recommendedStaff>
<staffWages>150</staffWages>
<actual>250</actual>
</finances>
<finances id="3" date="03-01-2016">
<projection>687</projection>
<recommendedStaff>20</recommendedStaff>
<staffWages>150</staffWages>
<actual>250</actual>
</finances>
<finances id="4" date="04-01-2016">
<projection>587</projection>
<recommendedStaff>15</recommendedStaff>
<staffWages>150</staffWages>
<actual>250</actual>
</finances>
<finances id="5" date="05-01-2016">
<projection>124</projection>
<recommendedStaff>5</recommendedStaff>
<staffWages>150</staffWages>
<actual>250</actual>
</finances>
<finances id="6" date="06-01-2016">
<projection>874</projection>
<recommendedStaff>22</recommendedStaff>
<staffWages>150</staffWages>
<actual>250</actual>
</finances>
</january>
答案 0 :(得分:0)
$xml=simplexml_load_file("XMLtest.xml") or die("Error: Cannot create object");
switch ($_GET["SearchChoice"])
{
case 'ID Search':
$nodes = $xml->finances[$passID];
break;
case 'Date Search':
$passDate = strval($_GET["DateSend"]);
$nodes = $xml->xpath("/january/finances[@date='". $passDate . "']");
if ($nodes)
$nodes = array_shift($nodes); // First match
break;
default:
$nodes = NULL;
}
if ($nodes) // Don't care how we got them
{
echo $nodes->day . ",<br>Projection: ";
// etc
}
这会在开始时加载文件,然后根据您的搜索选择创建一个节点(存储在$ nodes中)(熟悉switch语句 - 非常有用,尤其是在使用或不使用时使用“break”命令)。
在switch语句之后,无论你如何得到它,你都有一个节点。这是编码的好习惯 - 条件是“照顾好”,从现在开始不是问题。
实际上,对两个选项使用xpath可能更好一点 - 不同代码路径之间的差异最小,便于调试和维护。