Здравствуйте. Долго мучаюсь с проблемой добавления элементов в открытый файл. $doc = new DomDocument; $doc -> load("source.php"); $elem = $doc -> createElement("div"); $doc -> getElementById("td1") -> appendChild($elem); $doc -> saveXML("source.php"); И никаких элементов не добавляется в файл, никаких ошибок не выводит error_log. Помогите пожалуйста.
Читай документацию https://php.net/manual/ru/domdocument.savexml.php надо так: echo $doc -> saveXML();
Сделал, как ты сказал, спасибо мужик. Но, в этом вся и проблема, я как только не использовал уже. Уже и XPath пробовал, все с fwrite( w+), иначе просто не знаю, потому что теперь он выдает ошибку: Call to a member function appendChild() on a non-object и линия, которая указывает на getElementById(); Скажи, что делать?
Мб так? Если версия пхп старая, то нельзя обращение делать к результату функции как к объекту. $td1 = $doc -> getElementById("td1"); $td1->appendChild($elem); $doc -> saveXML("source.php");
Спасибо, но не помогло. Остановимся на echo $doc -> saveXML(); и забудем ту позорную строку. Есть у кого-нибудь еще идеи?
чЧто значит "не помогло"? Ошибка не исчезла, или тег не появился в результате? Это капец разные исходы.
Код (PHP): $doc = new DomDocument; $doc -> load("source.php"); $elem = $doc -> createElement("div"); $doc -> getElementById("td1") -> appendChild($elem); $doc -> save("source.php");
Нет, ошибка по прежнему есть. Он говорит, что запрос элемента по id от дум документа - не является объектом. Может быть это действительно так? Я то новичок и с таким еще не сталкивался. Через file_get_contents прекрасно реализуется. Но как без всяких проблем и массивов добавить в файл div?
А ну все ясно с вами, вы пытаетесь в файл добавить который не является xml. Дурогоните... Самым натуральным образом. Почитайте, что такое xml. Прежде чем браться за это.
Зачем это прислали? Добавлено спустя 6 минут 14 секунд: Есть код: <?php $doc = new DomDocument; $doc -> preserveWhiteSpace = false; $doc -> load("source.php"); $xpath = new DOMXPath($doc); $query = "/html"; $elem = $doc -> createElement("div", "Привет"); $entries = $xpath -> query($query); foreach ($entries as $entry) { $entry -> appendChild($elem); } $fopen = fopen("source.php", "w+"); fwrite($fopen, $doc -> saveXML()); ?> Он работает на 100%. НО! У него есть огромный минус. Мне приходиться каждый раз переписывать файл. Я не могу тратить на такую ерунду ресурсы сервера, ведь рано или поздно при тысяче пользователей он попросту встанет. Именно поэтому мне нужен код, который будет добавлять на html, xhtml, любую другую страницу теги более проще. В идеале остановиться на appendChild и больше ничего, с такой же простотой как и в JS. Профессионалы, не подскажете?
source.php: Код (PHP): <?xml version="1.0" encoding="utf-8"?> <html></html> code php: Код (PHP): $dom=new DomDocument('1.0','utf-8'); $file='source.php'; $dom->load($file); $div=$dom->createElement('div','Приветище!!!'); $dom->getElementsByTagName('html')->item(0)->appendChild($div); $dom->save($file); source.php: Код (PHP): <?xml version="1.0" encoding="utf-8"?> <html><div>Приветище!!!</div></html> Все потому, что у DOMNodeList есть только метод item, который выходит на DOMNode и там уже есть appendChild. Так - то. По этому и косяк у вас. А какраз у: Код (PHP): foreach ($entries as $entry) { Переменная $entry уже возвращает узлы, по этому и нет ошибки, что function undefined appendChild. И в Вашем случае getEementById работать не будет, так как он работает только по спецификации DTD, которой у вас и вовсе нет. И прежде, чем работать с такими вещами, прочитайте про эти вещи более глубже. Но в вашем случае никто не отменял xpath. Дерзайте и главное не забывайте про метод item, который вернет вам нужный узел.
Может хотя бы кто-нибудь написать что-то типа "Иди и сам найди" или никто этого сделать тупо не может?
Пожалуйста, тут все есть. А тут тоже: XML DTD Ну а тут то сколько всего: xml dtd Круто не правда-ли? Попробуй тебе понравится
Спасибо всем большое! Я разобрался в xml dtd. Такой вопрос, где его можно использовать, кроме баз данных?