我是一名互动的PHP开发人员,试图通过XML解析我的第一个镜头。我了解基础知识,循环遍历节点并打印它们及其属性。我遗失的一件事是如何检查和编写XML文档中标记名称的条件?
所以我需要做的是读取xml文件的每一行:
确定其是否为开放的<level>
代码并替换为<UL>
确定其<file>
标记,并将其替换为<li>file</li>
确定其是</level>
标记,并将其替换为</ul>
级别标记具有区分它们的属性。
XML看起来像这样
<level dirname="1">
<file>Filename1</file>
<file>Filename2</file>
<file>Filename3</file>
<file>Filename4</file>
</level>
<level dirname="2">
<file>Filename1</file>
<file>Filename2</file>
<file>Filename3</file>
<file>Filename4</file>
</level>
<level dirname="3">
<level dirname = "5">
<file>Filename1</file>
<file>Filename2</file>
<file>Filename3</file>
<file>Filename4</file>
</level>
</level>
它应该看起来像这样:
<ul>
<li>Filename1</li>
<li>Filename2</li>
<li>Filename3</li>
<li>Filename4</li>
</ul>
<ul>
<li>Filename1</li>
<li>Filename2</li>
<li>Filename3</li>
<li>Filename4</li>
</ul>
<ul>
<ul>
<li>Filename1</li>
<li>Filename2</li>
<li>Filename3</li>
<li>Filename4</li>
</ul>
</ul>
注意嵌套的<level>
标签....因为这样我不能简单地回显<ul>
</ul>
然后循环<li>
标签....我有获取xml文件中的每个元素,并决定用哪个标记替换它。
任何帮助都会很棒。
由于
克雷格
答案 0 :(得分:1)
您需要创建递归函数。这将检查是否存在嵌套级别,如果有,则使用相同的函数生成它们。
注意,您需要使用(string)转换文件节点以将其打印出来!
function printLevel(SimpleXMLElement $e){
$re = '';
if(!empty($e->level)){ // checking for nested levels
foreach($e->level as $lvl){
$re .= '<ul>'.printLevel($lvl)."</ul>\n";
}
}
if(!empty($e->file)){ // checking for files
foreach($e->file as $file){
$re .= '<li>'.(string)$file."</li>\n";
}
}
return $re;
}
$xml = new SimpleXMLElement($xmlText);
echo printLevel($e);
这样可行。但是你的XML格式不正确!添加覆盖根元素并替换为&gt;!