إضافة كتلة من XML كما الطفل من كائن SimpleXMLElement
سؤال
لدي هذا SimpleXMLElement كائن 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
كائن إلى دوم, إنشاء 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 المكتبة التي لديها بالفعل هذه ميزة المدمج في مثل SimpleDOM.كنت انتزاع SimpleDOM واستخدام 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. التجريبي على الانترنت.