快速业务通道

PHP中的XML拉模式解析

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22

</element>";
if (!isset($HTTP_RAW_POST_DATA)) {
  fault(22, "Please make sure always_populate_raw_post_data = On in php.ini");
}
else {
  // set up the request
  $request = $HTTP_RAW_POST_DATA;
  error_reporting(E_ERROR | E_WARNING | E_PARSE);
  // create the reader
  $reader = new XMLReader();
  $reader->setRelaxNGSchema("request.rng");
  $reader->XML($request);
  $input = "";
  while ($reader->read()) {
   if ($reader->name == "double" && $reader->nodeType == XMLReader::ELEMENT) {
     while ($reader->read()) {
      if ($reader->nodeType == XMLReader::TEXT
       || $reader->nodeType == XMLReader::CDATA
       || $reader->nodeType == XMLReader::WHITESPACE
       || $reader->nodeType == XMLReader::SIGNIFICANT_WHITESPACE) {
        $input .= $reader->value;
      }
      else if ($reader->nodeType == XMLReader::END_ELEMENT
       && $reader->name == "double") {
        break;
      }
     }
     break;
   }
  }
  if (isset($php_errormsg) ) fault(21, $php_errormsg);
  else if (! $reader->isValid()) fault(19, "Invalid request");
  else if ($input < 0) fault(20, "Cannot take square root of negative number");
  else respond($input);
  $reader->close();
}
function respond($input)
{
?>
<methodResponse>
 <params>
  <param>
   <value><double><?php
echo   sqrt($input);
?></double></value>
  </param>
 </params>
</methodResponse>
 <?php
}
function fault($code, $message)
{
 echo "<?xml version=''1.0''?>
<methodResponse>
 <fault>
  <value>
   <struct>
    <member>
     <name>faultCode</name>
     <value><int>" . $code . "</int></value>
    </member>
    <member>
     <name>faultString</name>
     <value>
       <string>" . $message . "</string>
     </value>
    </member>
   </struct>
  </value>
 </fault>
</methodResponse>";

}

属性

在正常的推解析期间不会看到属性。若要读取属性,请停止在元素的起点处,通过名称或编号来请求特定属性。

将需要的属性名称传递到 getAttribute(),以便在当前元素上查找该属性的值。例如,下面的语句请求当前元素的 id 属性:

$id = $reader->getAttribute("id");

如果属性位于名称空间中 —— 例如,xlink:href —— 则调用 getAttributeNS(),将本地名称和名称空间 URI 分别作为第一个和第二个参数进行传递。(前缀是无关紧要的。)例如,下面的语句将请求 http://www.w3.org/1999/xlink/ 名称空间中 xlink:href 属性的值:

$href = $reader->getAttributeNS("href", "http://www.w3.org/1999/xlink/");

如果属性不存在,那么这两种方法都将返回

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号