Cara Mengubah Tatasusunan Berbilang Dimensi Secara Berulang kepada XML dengan Iterator dan XMLWriter

Barbara Streisand
Lepaskan: 2024-10-20 15:40:03
asal
477 orang telah melayarinya

How to Iteratively Transform Multidimensional Arrays into XML with Iterator and XMLWriter

Mengulang Tatasusunan Berbilang Dimensi untuk Transformasi XML

Satu tugas biasa apabila bekerja dengan tatasusunan bersarang atau berbilang dimensi ialah menukarnya kepada struktur XML. Sebagai contoh, pertimbangkan tatasusunan berikut:

$nodes = array(
    "parent node",
    "parent node",
    array(
        "child node",
        "child node",
        array(
            "grand child node",
            "grand child node"
        )
    )
);
Salin selepas log masuk

Matlamatnya adalah untuk mengubah tatasusunan yang diberikan kepada rentetan XML, seperti:

<node>
    <node>parent node</node>
    <node>parent node</node>
    <node>
        <node>child node</node>
        <node>child node</node>
        <node>
            <node>grand child node</node>
            <node>grand child node</node>
        </node>
    </node>
</node>
Salin selepas log masuk

Pendekatan Rekursif

Kaedah biasa untuk mengendalikan struktur bersarang adalah melalui rekursi, seperti yang digambarkan di bawah:

<code class="php">function traverse($nodes) {
    echo "<node>";

    foreach ($nodes as $node) {
        if (is_array($node)) {
            traverse($node);
        } else {
            echo "<node>$node</node>";
        }
    }

    echo "</node>";
}</code>
Salin selepas log masuk

Pendekatan Berulang Menggunakan Iterator

Walau bagaimanapun, alternatif pendekatan adalah menggunakan lelaran dengan Iterator. Ini membolehkan fleksibiliti yang lebih besar dan memudahkan proses:

<code class="php">class TranformArrayIterator extends RecursiveIteratorIterator {
    // Add indentation for each level
    protected function indent() {
        echo str_repeat("\t", $this->getDepth());
        return $this;
    }

    public function beginIteration() {
        echo '<nodes>', PHP_EOL;
    }

    public function endIteration() {
        echo '</nodes>', PHP_EOL;
    }

    public function beginChildren() {
        $this->indent()->beginIteration();
    }

    public function endChildren() {
        $this->indent()->endIteration();
    }

    public function current() {
        return sprintf('%s<node>%s</node>%s',
            str_repeat("\t", $this->getDepth() + 1),
            parent::current(),
            PHP_EOL
        );
    }
}</code>
Salin selepas log masuk

Untuk menggunakan iterator, buat seketika dan melintasi tatasusunan:

<code class="php">$iterator = new TranformArrayIterator(new RecursiveArrayIterator($nodes));

foreach ($iterator as $val) {
    echo $val;
}</code>
Salin selepas log masuk

Pendekatan ini menghasilkan output XML yang setara sebagai rekursif kaedah.

Kolaborasi XMLWriter

Untuk kawalan dan pengesahan XML yang lebih tepat, anda boleh menggunakan XMLWriter dengan kerjasama iterator:

<code class="php">class TranformArrayIterator extends RecursiveIteratorIterator {
    private $xmlWriter;

    public function __construct(XmlWriter $xmlWriter, Traversable $iterator, $mode = RecursiveIteratorIterator::LEAVES_ONLY, $flags = 0) {
        $this->xmlWriter = $xmlWriter;
        parent::__construct($iterator, $mode, $flags);
    }

    public function beginIteration() {
        $this->xmlWriter->startDocument('1.0', 'utf-8');
        $this->beginChildren();
    }

    public function endIteration() {
        $this->xmlWriter->endDocument();
    }

    public function beginChildren() {
        $this->xmlWriter->startElement('nodes');
    }

    public function endChildren() {
        $this->xmlWriter->endElement();
    }

    public function current() {
        $this->xmlWriter->writeElement('node', parent::current());
    }
}</code>
Salin selepas log masuk

Iterator ini memberikan kawalan yang lebih halus ke atas struktur XML dan memastikan kesahihannya.

Dengan memanfaatkan kuasa iterator, anda boleh memproses dan mengubah tatasusunan berbilang dimensi kepada struktur XML dengan cekap, menawarkan kedua-dua fleksibiliti dan kawalan untuk pelbagai senario.

Atas ialah kandungan terperinci Cara Mengubah Tatasusunan Berbilang Dimensi Secara Berulang kepada XML dengan Iterator dan XMLWriter. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!