PHP ʖ²ἯTH º󍋼/A CVII. XML ӯ·¨½⎶º¯ʽ ½鉜 Шdz libexpat.a: $(OBJS) ar -rc $@ $(OBJS) ranlib $@ °²װ PHP µĠWindows °汾ґ¾­Ěփ¸À©չģ¿鵄֧³֡£ĺΞШ¼Ӕ؈κθ½¼ӵĀ©չ¿⼴¿Ɋ¹ӃբЩº¯ʽ¡£ ԋАʱŤփ ¸À©չģ¿鎴¶¨ҥȎºΉ薃ָn¡£ ׊Դ Ѝ Ԥ¶¨ҥ³£ ӉӚբЩ³£ʇӉ¸À©չģ¿鶨ҥµģ¬Ҳ´˖»ӐԚ¸À©չģ¿鱻±ҫµ½ PHP ֐£¬»򕟔ڔːЊ±±»¶¯̬¼Ӕغ󣬕␩³£²œА§¡£ ʂ¼þ´¦-Ʒ Ӄ4ɨփ´¦-ƷµĠPHP º¯ʽ ʂ¼þèʶ xml_set_element_handler() xml_set_character_data_handler() xml_set_processing_instruction_handler() xml_set_default_handler() xml_set_unparsed_entity_decl_handler() xml_set_notation_decl_handler() xml_set_external_entity_ref_handler() ´󐡐´՛µþ£¨Case Folding£© XML_ERROR_NONE XML_ERROR_NO_MEMORY XML_ERROR_SYNTAX XML_ERROR_NO_ELEMENTS XML_ERROR_INVALID_TOKEN XML_ERROR_UNCLOSED_TOKEN XML_ERROR_PARTIAL_CHAR XML_ERROR_TAG_MISMATCH XML_ERROR_DUPLICATE_ATTRIBUTE XML_ERROR_JUNK_AFTER_DOC_ELEMENT XML_ERROR_PARAM_ENTITY_REF XML_ERROR_UNDEFINED_ENTITY XML_ERROR_RECURSIVE_ENTITY_REF XML_ERROR_ASYNC_ENTITY XML_ERROR_BAD_CHAR_REF XML_ERROR_BINARY_ENTITY_REF XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF XML_ERROR_MISPLACED_XML_PI XML_ERROR_UNKNOWN_ENCODING XML_ERROR_INCORRECT_ENCODING XML_ERROR_UNCLOSED_CDATA_SECTION XML_ERROR_EXTERNAL_ENTITY_HANDLING ·¶= Ҕςʇ PHP ½ű¾½⎶ XML ΄µµµĒ»Щ·¶=¡£ XML Ԫ˘½ṹ·¶= =ד 1. ϔʾ XML Ԫ˘½ṹ $file = "data.xml"; $depth = array(); function startElement($parser, $name, $attrs) {global $depth; for ($i = 0; $i $depth[$parser]; $i++) {print "";} print "$name\n"; $depth[$parser]++;} function endElement($parser, $name) {global $depth; $depth[$parser]--;} $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); if (!($fp = fopen($file, "r"))) {die("could not open XML input");} while ($data = fread($fp, 4096)) {if (!xml_parse($xml_parser, $data, feof($fp))) {die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));}} xml_parser_free($xml_parser); =ד 2. ½« XML ӳɤΪ HTML $file = "data.xml"; $map_array = array( "BOLD" = "B", "EMPHASIS" = "I", "LITERAL" = "TT"); function startElement($parser, $name, $attrs) {global $map_array; if ($htmltag = $map_array[$name]) {print "$htmltag ";}} function endElement($parser, $name) {global $map_array; if ($htmltag = $map_array[$name]) {print" /$htmltag ";}} function characterData($parser, $data) {print $data;} $xml_parser = xml_parser_create(); // ʹӃ´󐡐´՛µþ4±£֤ΒÇĜԚԪ˘ʽש֐Ւµ½բЩԪ˘û³Ɗxml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if (!($fp = fopen($file, "r"))) {die("could not open XML input");} while ($data = fread($fp, 4096)) {if (!xml_parse($xml_parser, $data, feof($fp))) {die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));}} xml_parser_free($xml_parser); XML ͢²¿ʵ̥·¶= Ĝ±»¸÷¶=ʹӃµĵĠXML ΄µµ£¨xmltest.xml º͠ xmltest2.xml£©±»PԚ¸÷¶=֮º󡣊 =ד 3. ͢²¿ʵ̥·¶= ?php $file = "xmltest.xml"; function trustedFile($file) {// only trust local files owned by ourselves if (!eregi("^([a-z]+)://", $file) fileowner($file) == getmyuid()) {return true;} return false;} function startElement($parser, $name, $attribs) {print "lt; font color=\"#0000cc\" $name /font "; if (sizeof($attribs)) {while (list($k, $v) = each($attribs)) {print" font color=\"#009900\" $k /font =\" font color=\"#990000\" $v /font \"";}} print "gt;";} function endElement($parser, $name) {print" lt;/ font color=\"#0000cc\" $name /font gt;";} function characterData($parser, $data) {print "b $data /b ";} function PIHandler($parser, $target, $data) {switch (strtolower($target)) {case "php": global $parser_file; // If the parsed document is "trusted", we say it is safe // to execute PHP code inside it. If not, display the code // instead. if (trustedFile($parser_file[$parser])) {eval($data);} else {printf("Untrusted PHP code: i %s /i ", htmlspecialchars($data));} break;}} function defaultHandler($parser, $data) {if (substr($data, 0, 1) ==" "substr($data, -1, 1) == ";") {printf(' font color="#aa00aa" %s /font ', htmlspecialchars($data));} else {printf(' font size="-1" %s /font ', htmlspecialchars($data));}} function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId, $publicId) {if ($systemId) {if (!list($parser, $fp) = new_xml_parser($systemId)) {printf("Could not open entity %s at %s\n", $openEntityNames, $systemId); return false;} while ($data = fread($fp, 4096)) {if (!xml_parse($parser, $data, feof($fp))) {printf("XML error: %s at line %d while parsing entity %s\n", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser), $openEntityNames); xml_parser_free($parser); return false;}} xml_parser_free($parser); return true;} return false;} function new_xml_parser($file) {global $parser_file; $xml_parser = xml_parser_create(); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); xml_set_processing_instruction_handler($xml_parser, "PIHandler"); xml_set_default_handler($xml_parser, "defaultHandler"); xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler"); if (!($fp = @fopen($file, "r"))) {return false;} if (!is_array($parser_file)) {settype($parser_file, "array");} $parser_file[$xml_parser] = $file; return array($xml_parser, $fp);} if (!(list($xml_parser, $fp) = new_xml_parser($file))) {die("could not open XML input");} print" pre "; while ($data = fread($fp, 4096)) {if (!xml_parse($xml_parser, $data, feof($fp))) {die(sprintf("XML error: %s at line %d\n", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));}} print "/pre "; print "parse complete\n"; xml_parser_free($xml_parser);? =ד 4. xmltest.xml ?xml version='1.0'? !DOCTYPE chapter SYSTEM "/just/a/test.dtd" [!ENTITY plainEntity "FOO entity" !ENTITY systemEntity SYSTEM "xmltest2.xml"] chapter TITLE Title plainEntity; /TITLE para informaltable tgroup cols="3" tbody row entry a1 /entry entry morerows="1" b1 /entry entry c1 /entry /row row entry a2 /entry entry c2 /entry /row row entry a3 /entry entry b3 /entry entry c3 /entry /row /tbody /tgroup /informaltable /para systemEntity; section id="about" title About this Document /title para !-- this is a comment -- ?php print 'Hi! This is PHP version '.phpversion();? /para /section /chapter =ד 5. xmltest2.xml ?xml version="1.0"? !DOCTYPE foo [!ENTITY testEnt "test entity"] foo element attrib="value"/ testEnt; ?php print "This is some more PHP code being executed.";? /foo º󍋼/A ưµ㼯A wddx_serialize_vars ɏһ¼¶ utf8_decode