这是我的xml文件的一部分
<?xml version="1.0" encoding="ISO-8859-1" ?>
<stati_team>
<team>
<team>Bayern Munich</team>
<victory>10</victory>
<loss>2</loss>
<ranking>1</ranking>
</team>
<team>
<team>RB Leipzig</team>
<victory>8</victory>
<loss>4</loss>
<ranking>2</ranking>
</team>
</stati_team>
我的目标是像浏览器一样显示xml文件,这是我的php代码,他可以正常工作
<?php
$file = "team.xml";
$depth = 0;
function startElement($parser, $name, $attrs){
global $depth;
$depth++;
print"<br>";
for ($i = 0; $i < $depth; $i++) {
print " ";
}
print "<<font color=\"#0000cc\">$name</font>\n";
print">";
}
function endElement($parser, $name){
global $depth;
$depth--;
for ($i=0; $i <$depth ; $i++) {
print " ";
}
print "<<font color=\"#0000cc\">/$name</font>";print "><br>";
}
function characterData($parser,$data){
global $depth;
for ($i = 0; $i < $depth; $i++) {
print " ";
}
print "$data";
}
$xml_parser=xml_parser_create();
xml_set_element_handler($xml_parser,"startElement","endElement");
xml_set_character_data_handler($xml_parser,"characterData");
if(!($fp=fopen($file,"r"))){
die("File XML: error");
}
while($data=fread($fp,4096)){
if(!xml_parse($xml_parser,$data,feof($fp))){
die("Error XML, ligne".xml_get_current_line_number($xml_parser)." !!!");
}
}
xml_parser_free($xml_parser);
?>
输出
XML文件的输出还不错。所以我的问题是我们如何做才能让<team>
标签处于同一水平</team>
的标签
我担心您不完全了解这些功能在做什么。尝试查看我的解决方案以及php手册中的各个功能,希望它会更加清晰。如果不像我现在所了解和理解的这些功能那样添加评论,那么我今天从未听说过。
这里是解决方案:为了显示它的作用,我使用了“ +”和“ *”而不是不间断空格。
不幸的是,原件现在有很多问题。标签内的空格就是一个例子。
我更改了以下内容:
删除了characterdate函数中不必要的内容。仅认为此功能可以打印出标签之间的内容-您在这里不需要任何其他内容!
然后,我添加了一个新的全局变量$ lastaction,该变量存储了最后一个标记的类型(开始或结束)。
现在,关键部分花费了您9个小时:如果最后一个标签是结束标签,我们需要在标签上缩进等级数。而已。太简单。但是,我还花了一些时间来获得这种超级简单的解决方案。:-/
如果最后一个标签是结束标签,我还在开始标签中添加了if来删除中断。因为那看起来是错误的,而不像您的示例。我还用str_repeat()替换了令人讨厌的for(echo)循环
<?php
$file = "team.xml";
$depth = 0;
$lastaction="";
function startElement($parser, $name, $attrs){
global $depth,$lastaction;
$depth++;
if ($lastaction!="end") print"<br>";
echo str_repeat('++', $depth);
print "<<font color=\"#0000cc\">$name</font>>";
$lastaction="start";
}
function endElement($parser, $name){
global $depth, $lastaction;
if ($lastaction=="end") echo str_repeat('**',$depth);
$depth--;
print "<<font color=\"#0000cc\">/$name</font>><br>";
$lastaction ="end";
}
function characterData($parser,$data){
print $data;
}
$xml_parser=xml_parser_create();
xml_set_element_handler($xml_parser,"startElement","endElement");
xml_set_character_data_handler($xml_parser,"characterData");
if(!($fp=fopen($file,"r"))){
die("File XML: error");
}
while($data=fread($fp,4096)){
if(!xml_parse($xml_parser,$data,feof($fp))){
die("Error XML, ligne".xml_get_current_line_number($xml_parser)." !!!");
}
}
xml_parser_free($xml_parser);
?>
结果完全正确(*和+仅用于演示,因为它们被添加到两个不同的函数中,因此您应该了解这里发生的情况-用一个或多个不间断空格替换它们,然后完成作业。;-)
+<STATI_TEAM>
++<TEAM>
+++<TEAM>Bayern Munich</TEAM>
+++<VICTORY>10</VICTORY>
+++<LOSS>2</LOSS>
+++<RANKING>1</RANKING>
**</TEAM>
++<TEAM>
+++<TEAM>RB Leipzig</TEAM>
+++<VICTORY>8</VICTORY>
+++<LOSS>4</LOSS>
+++<RANKING>2</RANKING>
**</TEAM>
*</STATI_TEAM>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句