Pergunta

Eu tenho esse objeto SimpleXMLElement com uma configuração XML semelhante ao seguinte ...

$xml = <<<EOX
<books>
    <book>
        <name>ABCD</name>
    </book>
</books>
EOX;

$sx = new SimpleXMLElement( $xml );

Agora eu tenho uma classe chamada Livro que contém informações. sobre cada livro. A mesma classe também pode cuspir para fora a informação livro. em formato XML semelhante ao acima (o bloco aninhado) .. exemplo,

$book = new Book( 'EFGH' );
$book->genXML();

... will generate
<book>
    <name>EFGH</name>
</book>

Agora eu estou tentando descobrir uma maneira pela qual eu posso usar este bloco XML gerado e anexar como uma criança de modo que agora parece que ... por exemplo ..

// Non-existent member method. For illustration purposes only.
$sx->addXMLChild( $book->genXML() );    

...XML tree now looks like:
<books>
    <book>
        <name>ABCD</name>
    </book>
    <book>
        <name>EFGH</name>
    </book>
</books>

De que documentação que já li sobre SimpleXMLElement, addChild () não vai conseguir este feito para você como ele não dados XML de apoio como o valor tag.

Foi útil?

Solução

Duas soluções. Primeiro, você fazê-lo com a ajuda da libxml / DOMDocument / SimpleXML: você tem que importar o objeto $sx para DOM , criar um DOMDocumentFragment e uso DOMDocumentFragment::appendXML() :

$doc = dom_import_simplexml($sx)->ownerDocument;

$fragment = $doc->createDocumentFragment();     
$fragment->appendXML($book->genXML());
$doc->documentElement->appendChild($fragment);

// your original $sx is now already modified.

Veja a Demonstração Online .

Você também pode se estender de SimpleXMLElement e adicione um método que está fornecendo isso. Usando este objeto especializada em seguida, lhe permitiria criar a seguinte facilmente:

$sx = new MySimpleXMLElement($xml);

$sx->addXML($book->genXML());

Outra solução é usar uma biblioteca XML que já tenha esse recurso built-in como SimpleDOM . Você agarra SimpleDOM e você usar InsertXML (), que funciona como o método addXMLChild () você estavam descrevendo.

include 'SimpleDOM.php';

$books = simpledom_load_string(
    '<books>
        <book>
            <name>ABCD</name>
        </book>
    </books>'
);

$books->insertXML(
    '<book>
        <name>EFGH</name>
    </book>'
);

Outras dicas

Tenha uma olhada no meu código:

$doc = new DOMDocument();       
$doc->loadXML("<root/>");       

$fragment = $doc->createDocumentFragment();     
$fragment->appendXML("<foo>text</foo><bar>text2</bar>");
$doc->documentElement->appendChild($fragment);

echo $doc->saveXML();

Isso modifica o documento XML, adicionando um fragmento XML. Demonstração Online .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top