2011-05-11 4 views
1

과 같이, 나는 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를 통해 반복적으로 I 루프? 이 XSLT없이 가능할 것이지만, 즉

<ul> 
    <li>a</li> 
    <ul> 
     <li>b</li> 
     <ul> 
     <li>c</li> 
     </ul> 
    </ul> 
    <ul> 
     <li>d</li> 
    </ul> 
</ul> 

답변

0

,이 더 재사용 생각 :

<?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); 
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); 
?> 
0

에 액세스하려면 자식 노드

$xml = simplexml_load_file('test.xml'); 
var_dump($xml); 

foreach($xml as $node){ 
    foreach($node->attributes() as $key=>$val){ 

     echo $key.'-'.$val.'-'; 
    } 
} 
관련 문제