DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> PHP高亮顯示 XML 源代碼
PHP高亮顯示 XML 源代碼
編輯:XML詳解     
將說明如何外部實體指向處理器來包含和解析其它文檔,如何處理 PIs,以及一種確定包含有 PIs 的代碼的可信度。

  能被該范例使用的的 XML 文檔(xmltest.xml 和 xmltest2.XML)被列在該范例之後。

  外部實體范例

<?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);
?> 
 

  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>

以下文檔將被 xmltest.xml 文件調用: 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>

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved