PHP SimpleXML问题…遍历每行XML确定使用的标记
我是一个中间的PHP开发人员,试图通过XML进行解析。我了解基本知识,遍历节点并打印它们及其属性。有一件事我弄丢了,那就是如何在XML文档中检查和写入标记名的条件 所以我需要做的是读取xml文件的每一行: 确定其是否为打开的PHP SimpleXML问题…遍历每行XML确定使用的标记,php,xml,simplexml,Php,Xml,Simplexml,我是一个中间的PHP开发人员,试图通过XML进行解析。我了解基本知识,遍历节点并打印它们及其属性。有一件事我弄丢了,那就是如何在XML文档中检查和写入标记名的条件 所以我需要做的是读取xml文件的每一行: 确定其是否为打开的标签,并替换为 确定它的标记的名称,并用文件替换它 确定其是否为标签,并将其替换为 级别标记具有区分它们的属性 XML看起来像这样 <level dirname="1"> <file>Filename1</file> &
标签,并替换为
确定它的
标记的名称,并用文件替换它
确定其是否为
标签,并将其替换为
级别标记具有区分它们的属性
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>
文件名1
文件名2
文件名3
文件名4
文件名1
文件名2
文件名3
文件名4
文件名1
文件名2
文件名3
文件名4
结果应该是这样的:
<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>
- 文件名1
- 文件名2
- 文件名3
- 文件名4
- 文件名1
- 文件名2
- 文件名3
- 文件名4
- 文件名1
- 文件名2
- 文件名3
- 文件名4
请注意嵌套的
标记…因此,我不能简单地回显
然后循环查找
标记…我必须获取xml文件中的每个元素,并决定用哪个标记替换它
任何帮助都会很好
谢谢
Craig您需要创建一个递归函数。这将检查是否存在嵌套级别,如果存在,则使用相同的函数生成它们
请注意,您需要使用(字符串)强制转换文件节点以将其打印出来
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);
函数打印级别(SimpleXMLElement$e){
$re='';
如果(!empty($e->level)){//检查嵌套的级别
foreach($e->级别为$lvl){
$re.=''.printLevel($lvl)。“
\n”;
}
}
如果(!empty($e->file)){//正在检查文件
foreach($e->file as$file){
$re.=''(字符串)$file. \n;
}
}
退还$re;
}
$xml=新的simplexmlement($xmlText);
回音打印级别(e美元);
这会奏效的。但是您的XML格式不正确!添加一个覆盖根元素并将其替换为> 嘿,谢谢你的快速回复…我今天无法测试,但我会在AM中查看一下…是的,当然XML有根标记等等…我只是键入它来给你一个ideaWell,它给出了预期的结果。但它不处理任何属性,因此需要使用$e->attributes()。您可以在PHP中找到非常好的手册。唯一让我头疼的是获取元素(甚至属性)的文本值:您需要像(string)$element这样的大小写!根据您所做的工作,您可能希望了解XSLT。它将XML文档转换为XML或HTML。不过,如果你是初学者,学习起来可能会很困难。