簡體   English   中英

使用xpath在PHP中解析XML

[英]Parsing XML in PHP using xpath

使用SOAP Web服務的簡單php代碼:

<?php

$url = "http://localhost:9090/TaskListService/TaskListWS?wsdl";
$client = new SoapClient($url);
$fcs = $client->__getFunctions();
var_dump($fcs);
$xml = $client->getTaskListForUser(array('userToken' => 'X:123:123:woo:John:Shoulders:mgr'));
print 'xml' . PHP_EOL;
print_r($xml);
$result = $xml->xpath('/doc/tasks/task');
print_r($result);
?>

在終端中運行以獲取:

[woo:/Library/WebServer/Documents] 255 > php TestTaskList.php
array(8) {
  [0]=>
  string(47) "toStringResponse toString(toString $parameters)"
  [1]=>
  string(77) "getTaskListForUserResponse getTaskListForUser(getTaskListForUser $parameters)"
  [2]=>
  string(104) "updateWaitingEntriesServiceResponse updateWaitingEntriesService(updateWaitingEntriesService $parameters)"
  [3]=>
  string(53) "queueEntryResponse queueEntry(queueEntry $parameters)"
  [4]=>
  string(77) "getAllQueueEntriesResponse getAllQueueEntries(getAllQueueEntries $parameters)"
  [5]=>
  string(71) "deleteQueueEntryResponse deleteQueueEntry(deleteQueueEntry $parameters)"
  [6]=>
  string(56) "updateEntryResponse updateEntry(updateEntry $parameters)"
  [7]=>
  string(107) "getAllQueueEntriesWithStatusResponse getAllQueueEntriesWithStatus(getAllQueueEntriesWithStatus $parameters)"
}
xml
stdClass Object
(
    [return] => <?xml version='1.0'?><doc><tasks><task><OWNER>woo</OWNER><OID>1448826671442</OID><QUEUE_NAME>HR</QUEUE_NAME><ENTRY_NUMBER>5020</ENTRY_NUMBER><PRIORITY></PRIORITY><CREATION_DATE>11-29-2015 14:51:11</CREATION_DATE><JOB_ID>5000</JOB_ID><JOB_STEP_ID>createReporting</JOB_STEP_ID><BUSINESS_PROCESS>NewEmployee</BUSINESS_PROCESS><DATA>test_data.xml</DATA><ENTRY_STATUS></ENTRY_STATUS><PRIORITY></PRIORITY><HANDLE_BY_DATE></HANDLE_BY_DATE><ESCALATE_TO_USER></ESCALATE_TO_USER><ESCALATE_TO_ROLE></ESCALATE_TO_ROLE><QUEUED_FOR_ROLE></QUEUED_FOR_ROLE><QUEUED_FOR_USERID></QUEUED_FOR_USERID><MSG></MSG><COMMENT></COMMENT><RESULT_OBJ>1448826383597.xml</RESULT_OBJ></task><task><OWNER>woo</OWNER><OID>1448397478803</OID><QUEUE_NAME>HR</QUEUE_NAME><ENTRY_NUMBER>4710</ENTRY_NUMBER><PRIORITY></PRIORITY><CREATION_DATE>11-24-2015 15:37:58</CREATION_DATE><JOB_ID>4700</JOB_ID><JOB_STEP_ID>createDependents</JOB_STEP_ID><BUSINESS_PROCESS>NewEmployee</BUSINESS_PROCESS><DATA>dependents.xml</DATA><ENTRY_STATUS></ENTRY_STATUS><PRIORITY></PRIORITY><HANDLE_BY_DATE></HANDLE_BY_DATE><ESCALATE_TO_USER></ESCALATE_TO_USER><ESCALATE_TO_ROLE></ESCALATE_TO_ROLE><QUEUED_FOR_ROLE></QUEUED_FOR_ROLE><QUEUED_FOR_USERID></QUEUED_FOR_USERID><MSG></MSG><COMMENT></COMMENT><RESULT_OBJ>1448397449614.xml</RESULT_OBJ></task></tasks><errors><error></error></errors></doc>
)

Fatal error: Call to undefined method stdClass::xpath() in /Library/WebServer/Documents/TestTaskList.php on line 10

我應該如何獲取“任務”條目列表? 請注意,我嘗試做

$result = $xml->xpath('/doc/tasks/task');

並得到我無法弄清楚的錯誤。

當您嘗試:

$xml->xpath('/doc/tasks/task');

在$ xml中,您有一個類型為stdClass的對象,該對象沒有xpath()方法。

您首先需要創建SimpleXMLElement對象,如下所示:

$simpleXml = SimpleXMLElement($xml->return);
// or $simpleXml = simplexml_load_string($xml->return);

然后可以使用xpath():

$result = $simpleXml->xpath('/doc/tasks/task');
var_dump($result);

之后,您將看到一個數組,其中包含兩個帶有“任務”條目的SimpleXMLElement對象,並對其進行迭代。

在這里閱讀更多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM