[英]PHP - Parse XML contained within XML element and Output into XML doc
[英]Count XML element over multiple documents within PHP
我有多个XML文档,其中包含API的输出-此输出是来自票证系统的支持票证。 我正在尝试计算状态设置为特定状态的票证。
XML输出如下所示(尽管在7个文档中有更多的请求元素)。
<response uri="/api/xml/getRequestsByView">
<result>
<status>Success</status>
<statuscode>200</statuscode>
<requests>
<request>
<form name="requestID">12345</form>
<form name="userTimeFormat">dd MMM yyyy, HH:mm:ss</form>
<form name="contact">Name</form>
<form name="status">Open</form>
<form name="statusID">1</form>
<form name="priority">P3 Minor</form>
<form name="supportRep"/>
<form name="supportRepCostPerHour">0.00</form>
<form name="createdTime">20 Jun 2017, 08:22:00</form>
<form name="updatedTime">20 Jun 2017, 08:23:11</form>
<form name="dueByTime"/>
<form name="isOverDue">false</form>
<form name="accountID"/>
<form name="account"/>
<form name="subject">Subject Name</form>
</request>
<request>
<form name="requestID">12346</form>
<form name="userTimeFormat">dd MMM yyyy, HH:mm:ss</form>
<form name="contact">Contact Name</form>
<form name="status">Open</form>
<form name="statusID">1</form>
<form name="priority">P3 Minor</form>
<form name="supportRep"/>
<form name="supportRepCostPerHour">0.00</form>
<form name="createdTime">20 Jun 2017, 08:21:58</form>
<form name="updatedTime">20 Jun 2017, 08:23:10</form>
<form name="dueByTime"/>
<form name="isOverDue">false</form>
<form name="accountID"/>
<form name="account"/>
<form name="subject">Subject Name</form>
</request>
</requests>
</result>
到目前为止,我创建了下面的函数-从下面获得的输出是“ 1440”。 它应该可以正常工作,因为当我替换计数元素以回显每个匹配项时,输出将显示具有匹配状态的每个票证的状态-只是计数元素似乎无法正常工作。
function countPriority($status){
$files = array("includes/xml-1.xml","includes/xml-2.xml","includes/xml-3.xml","includes/xml-4.xml","includes/xml-5.xml","includes/xml-6.xml","includes/xml-7.xml");
$count = 0;
foreach ($files as $url) {
$xml = simplexml_load_file($url);
foreach ($xml->result->requests->request as $request){
if ($request->form['3'] == $status){
$count+= count($request);
}
}
return $count;
}
}
对于PHP /编码,我是一个新手,因此非常感谢您的任何建议或帮助。
似乎您在这里出错: $count+= count($request);
。 如果您只是想计算多少张具有特定状态的票,那么您只需要将计数器增加一即可,例如$count++;
。 相反,您正在做的是通过每个$request
的元素$count
增加$count
的值。
另外,正如注释中指出的那样,您应该将return
语句移出foreach
循环,因为否则,您的方法只会循环访问数组中的第一个文件。
因此,您的方法应如下所示:
function countPriority($status){
$files = array("includes/xml-1.xml","includes/xml-2.xml","includes/xml-3.xml","includes/xml-4.xml","includes/xml-5.xml","includes/xml-6.xml","includes/xml-7.xml");
$count = 0;
foreach ($files as $url) {
$xml = simplexml_load_file($url);
foreach ($xml->result->requests->request as $request){
if ($request->form['3'] == $status){
$count++;
}
}
}
return $count;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.