使用参数循环XML并将它们作为列表输出?

时间:2011-05-11 11:18:24

标签: php xml

我有一个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>

3 个答案:

答案 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.'-';
    }
}