PHP 如何将 Soap XML 与 XML Schema(.xsd) 链接起来


PHP How to link Soap XML with XML Schema(.xsd)

我有两个网址。

http://www.labs.skanetrafiken.se/v2.2/GetStartEndPoint.xsd
http://www.labs.skanetrafiken.se/v2.2/querypage.asp?inpPointFr=lund&inpPointTo=ystad

如何让这两者协作,以便我可以通过 PHP 提取信息?

如何将XML文件中的所有信息提取到PHP对象或数组中。

我只是用这段代码回答了我自己的问题:

/**
 * convert xml string to php array - useful to get a serializable value
 *
 * @param string $xmlstr
 * @return array
 * @author Adrien aka Gaarf
 */

function xmlstr_to_array($xmlstr) {
    $doc = new DOMDocument();
    $doc->loadXML($xmlstr);
    return domnode_to_array($doc->documentElement);
}
function domnode_to_array($node) {
    $output = array();
    switch ($node->nodeType) {
        case XML_CDATA_SECTION_NODE:
        case XML_TEXT_NODE:
        $output = trim($node->textContent);
        break;
        case XML_ELEMENT_NODE:
        for ($i=0, $m=$node->childNodes->length; $i<$m; $i++) {
            $child = $node->childNodes->item($i);
            $v = domnode_to_array($child);
            if(isset($child->tagName)) {
                $t = $child->tagName;
                if(!isset($output[$t])) {
                    $output[$t] = array();
                }
                $output[$t][] = $v;
            }
            elseif($v) {
                $output = (string) $v;
            }
        }
        if(is_array($output)) {
            if($node->attributes->length) {
                $a = array();
                foreach($node->attributes as $attrName => $attrNode) {
                    $a[$attrName] = (string) $attrNode->value;
                }
                $output['@attributes'] = $a;
            }
            foreach ($output as $t => $v) {
                if(is_array($v) && count($v)==1 && $t!='@attributes') {
                    $output[$t] = $v[0];
                }
            }
        }
        break;
    }
    return $output;
}


$xml = 'http://www.labs.skanetrafiken.se/v2.2/querypage.asp?inpPointFr=lund&inpPointTo=ystad';      
$xmlstr = new SimpleXMLElement($xml, null, true);
$array = xmlstr_to_array($xmlstr->asXML());
print_r($array);

这将返回一个带有 XML 的数组,这正是我希望能够使用的。