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