Как добавить новые элементы в XML, используя PHP DOM глубже, чем корень? - PullRequest
3 голосов
/ 07 апреля 2009

Все примеры, которые я могу найти в Интернете по этому поводу, включают простое добавление содержимого в файл XML в корне документа, но мне действительно нужно сделать это глубже.

Мой XML-файл прост, у меня есть:

<?xml v1 etc>
<channel>
<screenshots>
<item>
  <title>Image Title</title>
  <link>www.link.com/image.jpg</link>
</item>
</screenshots>
</channel>

Все, что я хочу сделать, это добавить новые элементы "item", каждый с заголовком и ссылкой. Я знаю, что мне нужно использовать PHP DOM, но я озадачен тем, как его кодировать, чтобы он добавлял данные в «скриншоты», а не переписывал весь документ. У меня есть подозрение, что мне может понадобиться и XPath, но я не знаю, как!

Код, который я собрал из онлайн-примеров, выглядит следующим образом (но я уверен, что это неправильно)

$newshottitle = "My new screenshot";
$newshotlink = "http://www.image.com/image.jpg";

$dom = newDomDocument;
$dom->formatOutput = true;
$dom->load("../xml/screenshots.xml");

$dom->getElementsByTagName("screenshots");
$t = $dom->createElement("item");
$t = $dom->createElement("title");
$t->appendChild($dom->createTextNode("$newshottitle"));

$l = $dom->createElement("link");
$l->appendChild($dom->createTextNode("$newshotlink"));

$dom->save("../xml/screenshots.xml");

1 Ответ

8 голосов
/ 07 апреля 2009

добавление содержимого в файл XML в корне документа, но мне действительно нужно сделать это глубже.

В данный момент вы нигде не добавляете контент! Вы создаете узлы и с текстом, а затем ничего с ними не делаете. Вы должны передавать их в «appendChild» на узле элемента (который вы также в настоящее время создаете и немедленно отбрасываете, не назначая его переменной).

Вот отправная точка:

$screenshots= $dom->getElementsByTagName("screenshots")[0];

$title= $dom->createElement("title");
$title->appendChild($dom->createTextNode($newshottitle));
$item= $dom->createElement("item");
$item->appendChild($title);
$screenshots->appendChild($item);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...