繁体   English   中英

计算PHP中多个文档上的XML元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM