我尝试了许多预构建的解析器,包括 xml2array 解析器,但都没有运气。我也尝试过自己的方法,但也没有任何成功。我已经尝试了 simplexmlelement/xpath 和一堆不同的方法,结果相同,所以我在一个我用头敲键盘的地方。
基本上,我正在尝试解析 API 调用向我吐回的代码。我正在打一个肥皂电话并通过 curl (https) 获取 xml 内容。
这是我返回的 xml 示例:HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
Content-Type: text/xml;charset=UTF-8
Transfer-Encoding: chunked
Date: Sat, 21 Apr 2012 19:49:30 GMT
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
<env:Header></env:Header>
<env:Body>
<ns:processRequestResponse xmlns:ns='hidden.address'>
<result>
<?xml version="1.0" encoding="UTF-8"?>
<CRMMessage language="en_US" currency="USD" isTrustedSAT="false" hostversion="hiddenINT">
<RequestCode>HiddenMethoForCall</RequestCode>
<ResponseCode>A</ResponseCode>
<ResultSet>
<ResultSetMetaData>
<RSColumn name="FirstName" type="string" nullable="true"></RSColumn>
<RSColumn name="LastName" type="string" nullable="true"></RSColumn>
<RSColumn name="EmailAddress" type="string" nullable="true"></RSColumn>
</ResultSetMetaData>
<Rows>
<Row id="hiddenINT">
<Col>John</Col>
<Col>Doe</Col>
<Col>john@doe.com</Col>
</Row>
</Rows>
</ResultSet>
</CRMMessage>
</result>
</ns:processRequestResponse>
</env:Body>
</env:Envelope>
我尝试使用 xml2array,但它明确指出它不支持在同一级别解析同名键。
我不确定这是否重要,因为我对任何建议的解析器持开放态度,但这是我放在一起的一个(这是在发出请求后处理请求的类内部):
$retVal = curl_exec($soap_do);
if($retVal === false) {
$err = 'Curl error: ' . curl_error($soap_do);
throw new requestManager($err);
} else {
$string = strstr($retVal, '<');
// $aResp = simplexml_load_string($string);
if(!function_exists('xml_parser_create')) {
//print "'xml_parser_create()' function not found!";
return array();
}
curl_close($soap_do);
//custom parse
$aResp = array();
$i=0;
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
// xml_parse_into_struct($parser, $string, $values, $tags);
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
xml_parse_into_struct($parser, trim($string), $values);
xml_parser_free($parser);
// var_dump($values);
foreach($values as $val) {
foreach($val as $key=>$value) {
if($key=='value'){
if(is_array($value)) {
foreach($value as $k=>$v) {
echo $v;
$value[$i]=$value;
}
}else {
$aResp[$i]=$value;
echo '<h1>'.$key.'</h1>';
echo '<h2>'.$value.'</h2><br>';
}
$i++;
}
}
}
}
任何帮助将不胜感激,因为我在这里碰壁。我已经检查了我能想到的所有资源,但没有运气。谢谢!