>  기사  >  백엔드 개발  >  Iterator 및 XMLWriter를 사용하여 다차원 배열을 XML로 반복적으로 변환하는 방법

Iterator 및 XMLWriter를 사용하여 다차원 배열을 XML로 반복적으로 변환하는 방법

Barbara Streisand
Barbara Streisand원래의
2024-10-20 15:40:03483검색

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

XML 변환을 위한 다차원 배열 반복

중첩 또는 다차원 배열 작업 시 일반적인 작업 중 하나는 배열을 XML 구조로 변환하는 것입니다. 예를 들어, 다음 배열을 고려해 보세요.

$nodes = array(
    "parent node",
    "parent node",
    array(
        "child node",
        "child node",
        array(
            "grand child node",
            "grand child node"
        )
    )
);

주어진 배열을 다음과 같은 XML 문자열로 변환하는 것이 목표입니다.

<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>

재귀적 접근 방식

중첩 구조를 처리하는 일반적인 방법은 아래 그림과 같이 재귀를 사용하는 것입니다.

<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>

Iterator를 사용한 반복 접근 방식

그러나 대안 접근 방식은 Iterator와 함께 반복을 사용하는 것입니다. 이를 통해 유연성이 향상되고 프로세스가 단순화됩니다.

<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>

반복자를 사용하려면 이를 인스턴스화하고 배열을 트래버스합니다.

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

foreach ($iterator as $val) {
    echo $val;
}</code>

이 접근 방식은 재귀와 동일한 XML 출력을 생성합니다. 방법.

XMLWriter 공동 작업

보다 정확한 XML 제어 및 유효성 검사를 위해 반복자와 공동으로 XMLWriter를 활용할 수 있습니다.

<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>

이 반복기는 XML 구조를 더욱 세밀하게 제어하고 유효성을 보장합니다.

반복기의 기능을 활용하면 다차원 배열을 효율적으로 처리하고 XML 구조로 변환할 수 있어 다양한 시나리오에 대한 유연성과 제어 기능을 모두 제공할 수 있습니다.

위 내용은 Iterator 및 XMLWriter를 사용하여 다차원 배열을 XML로 반복적으로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.