• 技术文章 >后端开发 >php教程

    基于xml+xslt+css+php快速构建可扩展网站_PHP教程

    2016-07-13 17:39:38原创546

    1.让数据与显示分离
    test.xml 数据:
    test title
    test content
    banner
    sidebar
    main body
    end of the page
    test.xslt 模板:
    test
    ]]>
    2.网页自动生成
    php 程序读入config文件根据文件中指定的目标文件名 和 数据文件名 以及 模板文件名生成目标页面
    config 文件:
    test.html
    test.xml
    test.xslt
    php 代码:
    $xml_file = “../conf/config”;
    $name_tag = 0;
    $xml_tag = 0;
    $xsl_tag = 0;
    $name = “”;
    $arr = Array();
    $i = 0;
    function startElement($parser_instance, $element_name, $attrs)
    {
    global $name_tag;
    global $xml_tag;
    global $xsl_tag;
    switch($element_name)
    {
    case “NAME” :
    $name_tag = 1;
    break;
    case “XMLFILE” :
    $xml_tag = 1;
    break;
    case “XSLFILE” :
    $xsl_tag = 1;
    break;
    }
    }
    function characterData($parser_instance, $xml_data)
    {
    global $arr;
    global $name_tag;
    global $xml_tag;
    global $xsl_tag;
    global $name;
    $xml_data = ltrim($xml_data);
    if ($xml_data != “”)
    {
    if ($name_tag == 1)
    {
    $arr["$xml_data"] = Array();
    $name = $xml_data;
    $arr["$name"][0] = $name;
    $name_tag = 0;
    }
    if ($xml_tag == 1)
    {
    $arr["$name"][1] = $xml_data;
    $xml_tag = 0;
    }
    if ($xsl_tag == 1)
    {
    $arr["$name"][2] = $xml_data;
    $xsl_tag = 0;
    }
    }
    }
    function endElement($parser_instance, $element_name)
    {
    }
    function buildHtml($name, $xml, $xsl)
    {
    echo “$name $xml $xsl ”;
    $xslDoc = new DOMDocument();
    $xslDoc->load(”$xsl”);
    $xmlDoc = new DOMDocument();
    $xmlDoc->load(”$xml”);
    $proc = new XSLTProcessor();
    $proc->importStylesheet($xslDoc);
    $html = $proc->transformToXML($xmlDoc);
    if (!($filehandler = fopen($name, “w+”)))
    {
    die(”could not open $name output”);
    }
    fwrite($filehandler, $html);
    fclose($filehandler);
    }
    $parser = xml_parser_create();
    xml_set_element_handler($parser, “startElement”, “endElement”);
    xml_set_character_data_handler($parser, “characterData”);
    if (!($filehandler = fopen($xml_file, “r”)))
    {
    die(”could not open XML input”);
    }
    while ($data = fread($filehandler, 4096))
    {
    if (!xml_parse($parser, $data, feof($filehandler)))
    {
    die(sprintf(”XML error: %s at line %d”,
    xml_error_string(xml_get_error_code($parser)),
    xml_get_current_line_number($parser)));
    }
    }
    fclose($filehandler);
    xml_parser_free($parser);
    foreach ($arr as $sub_arr)
    {
    $i = 0;
    foreach ($sub_arr as $obj)
    {
    if ($i == 0)
    {
    $name = $obj;
    }
    if ($i == 1)
    {
    $xml = $obj;
    }
    if ($i == 2)
    {
    $xsl = $obj;
    }
    $i++;
    }
    buildHtml($name, $xml, $xsl);
    }
    ?>
    3.重新规划整个页面
    \
    这样的分拆式设计可以使页面更灵活,随意修改任何部分都不会影响到其余的块,并且可以不断变换其中的某个块的数据 比如:body.xml 来生成更多新的页面, 特别适合新闻系统或论坛使用
    top.xml:

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/486275.htmlTechArticle1.让数据与显示分离 test.xml 数据: xml titletest title/title contenttest content/content topbanner/top leftsidebar/left bodymain body/body endend of the page/end /xml test...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:细数LAMP优势 看Web技术养生之道_PHP教程 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • PHP+Socket系列之实现websocket聊天室• PHP+Socket系列之IO多路复用及实现web服务器• PHP+Socket系列之实现客户端与服务端数据传输• PHP socket学习:带你做个简单的socket服务器• 一文详解PHP用流方式实现下载文件(附代码示例)
    1/1

    PHP中文网