PHP中的XML拉模式解析(6) // try grammar $schema = " xmlns='http://relaxng.org/ns/structure/1.0' datatypeLibrary='http://www.w3.org/2001/XMLSchema-datatypes'> sqrt "; 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) { ?> echo sqrt($input);