SimplexMlelement 객체의 자식으로 XML 블록 추가
문제
다음과 비슷한 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 문서를 수정합니다. 온라인 데모.
제휴하지 않습니다 StackOverflow