我尝试了许多预先构建的解析器,包括xml2array解析器,没有运气。我也尝试过我自己也没有任何成功。我尝试过simplexmlelement / xpath以及一系列具有相同结果的不同方法,所以我正处于一个我正在敲击键盘的地方。
基本上我正在尝试解析API调用回吐给我的代码。我正在拨打肥皂电话并通过curl(https)获取xml内容。
这是我回来的xml的一个例子: HTTP / 1.1 100继续
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++;
}
}
}
}
任何帮助都会受到赞赏,因为我在这里碰到了一堵墙。我已经检查了所有我能想到的资源而没有运气。谢谢!