我有一个XML文件,数据通过参数传递,如下所示:
<node id="a" title="Title A">
<node id="b" title="Title B">
<node id="c" title="Title C">
</node>
</node>
<node id="d" title="Title D">
</node>
</node>
如何以递归方式循环遍历此XML并仅打印列表中每个节点的ID?即。
<ul>
<li>a</li>
<ul>
<li>b</li>
<ul>
<li>c</li>
</ul>
</ul>
<ul>
<li>d</li>
</ul>
</ul>
答案 0 :(得分:0)
虽然没有xslt是可能的,但我认为这更可重用:
<?php
$dom = new DOMDocument();
$dom->loadXml('<node id="a" title="Title A">
<node id="b" title="Title B">
<node id="c" title="Title C">
</node>
</node>
<node id="d" title="Title D">
</node>
</node>');
$xsl = new DOMDocument;
$xsl->loadXml('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<ul><xsl:apply-templates /></ul>
</xsl:template>
<xsl:template match="node">
<li><xsl:value-of select="@title" /> (<xsl:value-of select="@id" />)
<xsl:if test="count(descendant::node) > 0">
<ul><xsl:apply-templates /></ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>', LIBXML_NOCDATA);
$xslt = new XSLTProcessor();
$xslt->importStylesheet($xsl);
echo $xslt->transformToXML($dom);
答案 1 :(得分:0)
如果您需要在打印前访问节点,可以使用simplexml_load_string执行此操作:
<?php
$str = '<node id="a" title="Title A">
<node id="b" title="Title B">
<node id="c" title="Title C">
</node>
</node>
<node id="d" title="Title D">
</node>
</node>';
$xml = simplexml_load_string($str);
print_r($xml);
?>
答案 2 :(得分:0)
访问子节点
$xml = simplexml_load_file('test.xml');
var_dump($xml);
foreach($xml as $node){
foreach($node->attributes() as $key=>$val){
echo $key.'-'.$val.'-';
}
}