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

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

WBOY
WBOYOriginal
2016-06-13 10:38:09904Durchsuche

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:

 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn