문제

다음과 비슷한 XML 설정이있는이 단순한 렉스 미들 레멘트 객체가 있습니다 ...

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

$sx = new SimpleXMLElement( $xml );

이제 정보가 포함 된 책이라는 수업이 있습니다. 각 책에 대해. 같은 수업이 책 정보를 뱉을 수도 있습니다. XML 형식으로 위의 위 (중첩 블록)를 비슷합니다. 예, 예,

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

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

이제 저는이 생성 된 XML 블록을 사용할 수있는 방법을 알아 내고 자녀로 추가하여 이제는 ... 예를 들어 ..

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

simplexmlelement에서 읽은 문서에서 addChild () XML 데이터를 태그 값으로 지원하지 않으므로이 작업을 수행하지 않습니다.

도움이 되었습니까?

해결책

두 가지 솔루션. 먼저 libxml / domdocument / simplexml의 도움으로 수행합니다. $sx 대상 , 생성 a DOMDocumentFragment 그리고 사용 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.

참조 온라인 데모.

연장 할 수도 있습니다 SimplexMlelement 이를 제공하는 메소드를 추가하십시오. 이 특수한 객체를 사용하면 다음을 쉽게 만들 수 있습니다.

$sx = new MySimpleXMLElement($xml);

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

또 다른 솔루션은이 기능이 이미 내장 된 XML 라이브러리를 사용하는 것입니다. 단순한. 당신은 잡습니다 단순한 또한 insertxml ()을 사용하여 설명했던 addxmlchild () 메소드와 같이 작동합니다.

include 'SimpleDOM.php';

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

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

다른 팁

내 코드를 살펴보십시오.

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

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

echo $doc->saveXML();

XML 조각을 추가하여 XML 문서를 수정합니다. 온라인 데모.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top