0

以下は、一連のxmlノードを作成し、それに渡される親にアタッチしようとするために使用しているコードです。

何が問題になっているのかわからない、親ノードは拡張されていません。

input.xml

<?xml version="1.0"?>
<root>
    <steps> This is a step </steps>
    <steps> This is also a step </steps>
</root>

output.xmlは

<?xml version="1.0">
<root>
    <steps>
        <step>
            <step_number>1</step_number>
            <step_detail>Step detail goes here</step_detail>
        </step> 
    </steps>
    <steps>
        <step>
            <step_number>2</step_number>
            <step_detail>Step detail of the 2nd step</step_detail>
        </step> 
    </steps>
</root>


    <?php
    $xml = simplexml_load_file( 'input.xml' );

    $domxml  = dom_import_simplexml( $xml );

    //Iterating through all the STEPS node
    foreach ($steps as $stp ){
        createInnerSteps( &$stp, $stp->nodeValue , 'Expected Result STring' );

        echo 'NODE VAL  :-----' . $stp->nodeValue;// Here it should have the new nodes, but it is not
    }

    function createInnerSteps( &$parent )
    {   
        $dom  = new DOMDocument();
        // Create Fragment, where all the inner childs gets appended
        $frag = $dom->createDocumentFragment();

        // Create Step Node
        $stepElm = $dom->createElement('step');
        $frag->appendChild( $stepElm );

        // Create Step_Number Node and CDATA Section
        $stepNumElm = $dom->createElement('step_number');
        $cdata = $dom->createCDATASection('1');
        $stepNumElm->appendChild ($cdata );

        // Append Step_number to Step Node
        $stepElm->appendChild( $stepNumElm );

        // Create step_details and append to Step Node 
        $step_details = $dom->createElement('step_details');
        $cdata = $dom->createCDATASection('Details');
        $step_details->appendChild( $cdata );

        // Append step_details to step Node
        $stepElm->appendChild( $step_details );

        // Add Parent Node to step element
            //  I get error PHP Fatal error:  
            //  Uncaught exception 'DOMException' with message 'Wrong Document Error'
        $parent->appendChild( $frag );

        //echo 'PARENT : ' .$parent->saveXML(); 
    }

?>
4

1 に答える 1

1

が呼び出されるたびに、内にWrong Document Error新しいDOMDocumentオブジェクトを作成するため、を取得しています。createInnerSteps()

コードが行$parent->appendChild($frag)に到達する$fragと、は関数で作成されたドキュメントに$parent属し、は操作しようとしているメインドキュメントに属します。このようなドキュメント間でノード(またはフラグメント)を移動することはできません。

最も簡単な解決策は、次のように置き換えることで1つのドキュメントのみを使用することです。

$dom  = new DOMDocument();

$dom = $parent->ownerDocument;

実行例を参照してください。

<steps>最後に、目的の出力を取得するには、各要素内の既存のテキストを削除する必要があります。

于 2012-09-05T12:58:50.057 に答える