将以下内容保存为xmltest.php <?php require_once "xsl_class.php"; $xml = new xml; $p = new xsl; $p->parser("resume2.xsl",$xml->parser("resume.xml")); $p->display(); ?> 变换其中的resume2.xsl,我们仍将看到不同的页面,只是以转变成html格式了。
相关的类: 类xml_class解析xml文档产生一个类似于domxml的结构 类xsl_class派生于xml_class,用于解析xsl文档并模拟xsl函数,其中template尚未实现。 ***************** xml_class.php ***************** <?php class element { var $element; // 这种节点用于文档中的任何元素。元素节点的子节点可以是其内容的元素节点、注释节点、处理信息节点以及文本节点。 var $text; // 文档中出现的所有文本,都分组归入到文本节点中。文本节点不可以有同为文本节点的紧接着的前或后的兄弟节点。 var $attribute; // 每一个元素节点都有一套自己附加的属性节点。默认的属性值以与指定属性一样的方法来处理。这些节点都没有子节点。 var $namespace; // 对于每一个以xlmns:和属性节点开头的元素,都有一个名称空格节点。这些节点没有子节点。 var $processinginstruction; // 每一个处理指令都有一个单独的节点。这些节点都没有子节点。 var $comment; // 每一个都有一个注释节点。这些节点都没有子节点。 var $parents = array(); var $childs = array(); }
class xml { var $tm = array(); var $xml_parser; var $data = array(); var $element = ""; // 当前节点 var $stack = array(); // 缓存当前标头的相关参数 var $type;
function trustedfile($file) { // only trust local files owned by ourselves if (!eregi("^([a-z]+)://", $file) && fileowner($file) == getmyuid()) { return true; } return false; }
//处理指令标头 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($this->trustedfile($parser_file[$parser])) { eval($data); } else { $this->tm[] = sprintf("untrusted php code: <i>%s</i>", htmlspecialchars($data)); } break; default: // echo $target; // echo "==".$data; // echo printf("%s %s",$target,$data); break; } }