首页 >后端开发 >php教程 >php解析cas返回的xml

php解析cas返回的xml

WBOY
WBOY原创
2016-06-23 14:01:211346浏览

    使用php进行cas验证时,对方返回这么一段xml

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>    <cas:authenticationSuccess>        <cas:user>zhangjian</cas:user>        <cas:language></cas:language>    </cas:authenticationSuccess></cas:serviceResponse>


    于是使用php相关函数进行解析
$str = <<authenticationSuccess[0];var_dump($successnode);*/$xml = new DOMDocument();$xml -> loadXML($str);var_dump($xml);


    结果都解析不出来,哪位朋友遇到过请指点下,不甚感激!!!


回复讨论(解决方案)

SimpleXML也是PHP5后提供的一套简单易用的xml工具集,
不过它不适用于包含namespace(命名空间)的xml。

怎么会?

<?php$str = <<<EOT&lt;cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'&gt;    &lt;cas:authenticationSuccess&gt;        &lt;cas:user&gt;zhangjian&lt;/cas:user&gt;        &lt;cas:language&gt;&lt;/cas:language&gt;    &lt;/cas:authenticationSuccess&gt;&lt;/cas:serviceResponse&gt;EOT;  $validateXML = simplexml_load_string($str, null, 0, 'cas', true);print_r($validateXML);$successnode = $validateXML->authenticationSuccess[0];print_r($successnode); $xml = new DOMDocument();$xml -> loadXML($str);print_r($xml);</pre>  <pre class="sycode" name="code">SimpleXMLElement Object(    [authenticationSuccess] =&gt; SimpleXMLElement Object        (            [user] =&gt; zhangjian            [language] =&gt; SimpleXMLElement Object                (                )        ))SimpleXMLElement Object(    [user] =&gt; zhangjian    [language] =&gt; SimpleXMLElement Object        (        ))DOMDocument Object(    [doctype] =&gt;     [implementation] =&gt; (object value omitted)    [documentElement] =&gt; (object value omitted)    [actualEncoding] =&gt;     [encoding] =&gt;     [xmlEncoding] =&gt;     [standalone] =&gt; 1    [xmlStandalone] =&gt; 1    [version] =&gt; 1.0    [xmlVersion] =&gt; 1.0    [strictErrorChecking] =&gt; 1    [documentURI] =&gt; file:///D:/AMP/web/    [config] =&gt;     [formatOutput] =&gt;     [validateOnParse] =&gt;     [resolveExternals] =&gt;     [preserveWhiteSpace] =&gt; 1    [recover] =&gt;     [substituteEntities] =&gt;     [nodeName] =&gt; #document    [nodeValue] =&gt;     [nodeType] =&gt; 9    [parentNode] =&gt;     [childNodes] =&gt; (object value omitted)    [firstChild] =&gt; (object value omitted)    [lastChild] =&gt; (object value omitted)    [previousSibling] =&gt;     [attributes] =&gt;     [ownerDocument] =&gt;     [namespaceURI] =&gt;     [prefix] =&gt;     [localName] =&gt;     [baseURI] =&gt; file:///D:/AMP/web/    [textContent] =&gt;             zhangjian            )</pre> </p> <p class="sougouAnswer">  谢谢唠叨大大,刚刚使用一个方法解决了,不过没有大大的好  <br>  <br>  <pre class="sycode" name="code">$str = <<<EOT&lt;cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'&gt;    &lt;cas:authenticationSuccess&gt;        &lt;cas:user&gt;zhangjian&lt;/cas:user&gt;        &lt;cas:language&gt;&lt;/cas:language&gt;    &lt;/cas:authenticationSuccess&gt;&lt;/cas:serviceResponse&gt;EOT;$str = str_replace('cas:', '', $str);$validateXML = simplexml_load_string($str);$successnode = $validateXML->authenticationSuccess[0];echo (string)$successnode->user;</pre> </p></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn</div></div></div><div class="nphpSytBox"><span>上一篇:<a class="dBlack" title="PHP类继承,有关构造函数" href="https://m.php.cn/zh/faq/260807.html">PHP类继承,有关构造函数</a></span><span>下一篇:<a class="dBlack" title="关于浏览器标签显示为文章标题的问题" href="https://m.php.cn/zh/faq/260809.html">关于浏览器标签显示为文章标题的问题</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>相关文章</h2><em><a href="https://m.php.cn/zh/article.html" class="bBlack"><i>查看更多</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle"
     style="display:block"
     data-ad-format="fluid"
     data-ad-layout-key="-6t+ed+2i-1n-4w"
     data-ad-client="ca-pub-5902227090019525"
     data-ad-slot="8966999616"></ins><script>     (adsbygoogle = window.adsbygoogle || []).push({});
</script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/zh/faq/1.html" title="PHP中使用cURL实现Get和Post请求的方法" class="aBlack">PHP中使用cURL实现Get和Post请求的方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/zh/faq/1.html" title="PHP中使用cURL实现Get和Post请求的方法" class="aBlack">PHP中使用cURL实现Get和Post请求的方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/zh/faq/1.html" title="PHP中使用cURL实现Get和Post请求的方法" class="aBlack">PHP中使用cURL实现Get和Post请求的方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/zh/faq/1.html" title="PHP中使用cURL实现Get和Post请求的方法" class="aBlack">PHP中使用cURL实现Get和Post请求的方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/zh/faq/2.html" title="正规表达式中所有的表达符号(总结)" class="aBlack">正规表达式中所有的表达符号(总结)</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-5902227090019525"
     data-ad-slot="5027754603"></ins><script>     (adsbygoogle = window.adsbygoogle || []).push({});
</script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>公益在线PHP培训,帮助PHP学习者快速成长!</p></div><div class="footermid"><a href="https://m.php.cn/zh/about/us.html">关于我们</a><a href="https://m.php.cn/zh/about/disclaimer.html">免责声明</a><a href="https://m.php.cn/zh/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p>                © php.cn All rights reserved
            </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) {
    var _times = times || -1, //100次
    _interval = interval || 20, //20毫秒每次
    _self = this,
    _selector = this.selector, //选择器
    _iIntervalID; //定时器id
    if( this.length ){ //如果已经获取到了,就直接执行函数
        func && func.call(this);
    } else {
        _iIntervalID = setInterval(function() {
            if(!_times) { //是0就退出
                clearInterval(_iIntervalID);
            }
            _times <= 0 || _times--; //如果是正数就 --

            _self = $(_selector); //再次选择
            if( _self.length ) { //判断是否取到
                func && func.call(_self);
                clearInterval(_iIntervalID);
            }
        }, _interval);
    }
    return this;
}
$("table.syntaxhighlighter").wait(function() {
    $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>");
});
$(document).on("click", ".cnblogs_code_footer",function(){
      $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide();
});
$('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}});
</script></body><!-- Matomo --><script>  var _paq = window._paq = window._paq || [];
  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://tongji.php.cn/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '9']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })();
</script><!-- End Matomo Code --></html>