PHP ile bilinmeyen bir XML yapısı üzerinde yineleme (DOM)

3 Cevap php

Hi all I want to write a function that parses a (theoretically) unknown XML data structure into an equivalent PHP array.

İşte benim örnek XML:

<?xml version="1.0" encoding="UTF-8"?>
<content>

<title>Sample Text</title>

<introduction>
    <paragraph>This is some rudimentary text</paragraph>
</introduction>
<description>
    <paragraph>Here is some more text</paragraph>
    <paragraph>Even MORE text</paragraph>
    <sub_section>
        <sub_para>This is a smaller, sub paragraph</sub_para>
        <sub_para>This is another smaller, sub paragraph</sub_para>
    </sub_section>
</description>
</content>

Ben devarticles Bu Yıl yineleme işlevi değiştirilmiştir:

$data = 'path/to/xmldoc.xml';
$xmlDoc = new DOMDocument(); #create a DOM element
$xmlDoc->load( $data ); #load data into the element
$xmlRoot = $xmlDoc->firstChild; #establish root

function xml2array($node)
    {
    if ($node->hasChildNodes())
    {
$subNodes = $node->childNodes;
    foreach ($subNodes as $subNode)
        {
        #filter node types
        if (($subNode->nodeType != 3) || (($subNode->nodeType == 3)))   
            {
            $arraydata[$subNode->nodeName]=$subNode->nodeValue;
            }
         xml2array($subNode);
         }
      }
      return $arraydata;
   }
//The getNodesInfo function call

 $xmlarray = xml2array($xmlRoot);


// print the output - with a little bit of formatting for ease of use...
foreach($xmlarray as $xkey)
     {
     echo"$xkey<br/><br/>";
     }

(Ben ideal tuşlara kendi menşeli düğümleri olarak aynı isimleri vermek istiyorum çünkü) Şimdi, çünkü diziye elemanları geçen kulüpler şekilde bir düğüm adı paylaşan unsurları üzerine yazarak ediyorum. Benim özyineleme büyük değildir ... Ancak, parantez boş olsa bile - düğümler ikinci kademe hala (açıklama düğümünün metin) ilk sıra values olarak geliyor.

Herkes ben daha iyi inşa nasıl herhangi bir fikir var mı?

3 Cevap

Ayrıca XML Unserializer kontrol etmek isteyebilirsiniz

http://pear.php.net/package/XML_Serializer/redirected

Sadece net kapalı bazı kod takılmaya daha iyi olabilir

http://www.bin-co.com/php/scripts/xml2array/

	/**
	 * xml2array() will convert the given XML text to an array in the XML structure.
	 * Link: http://www.bin-co.com/php/scripts/xml2array/
	 * Arguments : $contents - The XML text
	 *                $get_attributes - 1 or 0. If this is 1 the function will get the attributes as well as the tag values - this results in a different array structure in the return value.
	 *                $priority - Can be 'tag' or 'attribute'. This will change the way the resulting array sturcture. For 'tag', the tags are given more importance.
	 * Return: The parsed XML in an array form. Use print_r() to see the resulting array structure.
	 * Examples: $array =  xml2array(file_get_contents('feed.xml'));
	 *              $array =  xml2array(file_get_contents('feed.xml', 1, 'attribute'));
	 */
	function xml2array($contents, $get_attributes=1, $priority = 'tag') {

Sen SimpleXML veya xml_parse_into_struct ilginizi çekebilir.

$arraydata is neither passed to subsequent calls to xml2array() nor is the return value used, so yes "My recursion isn't great..." is true ;-)
To append a new element to an existing array you can use empty square brackets, $arr[] = 123; $arr[$x][] = 123;