PHP: XML düğümü bul ve çocuğunu eklemek

2 Cevap php

Ben aşağıdaki yapıya sahip bir xml belge var:

<?xml version="1.0" encoding="UTF-8"?>
<items>
  <item>
    <id>1</id>
    <url>www.test.com</url>
  </item>
  <item>
    <id>2</id>
    <url>www.test2.com</url>
  </item>
</items>

Böyle id alanı için 1 değeri olarak bir düğüm değeri aramak için güçlü olmak istiyorum. Sonra, o düğüm bulundu sonra, olurdu ana düğümünü seçin < item> ve içinde yeni bir çocuğunu eklemek.

Ben dom belgeyi kullanarak kavramını biliyorum, ama bu durumda bunu nasıl emin değil.

2 Cevap

Bu bir başlangıç ​​olmalıdır:

$dom = new DOMDocument;
$dom->loadXML($input);
$ids = $dom->getElementsByTagName('id');
foreach ($ids as $id) {
  if ($id->nodeValue == '1') {
    $child = $dom->createElement('tagname');
    $child->appendChild($dom->createTextNode('some text'));
    $id->parentNode->appendChild($child);
  }
}
$xml = $dom->saveXML();

ya da ona yakın bir şey.

Daha basit bir şekilde aynı şeyi yapabilirsiniz. Bunun yerine, değeri 1 daha sonra kendi üst seçerek bir <id/> düğüm arıyor, sen ilişkiyi tersine çevirmek ve bir <id/> çocuğu olan herhangi bir düğüm için bakabilirsiniz değeri 1.

XPath çok kolay bunu, burada SimpleXMLElement bunu nasıl yapabilirsiniz:

$items = simplexml_load_string(
    '<?xml version="1.0" encoding="UTF-8"?>
    <items>
      <item>
        <id>1</id>
        <url>www.test.com</url>
      </item>
      <item>
        <id>2</id>
        <url>www.test2.com</url>
      </item>
    </items>'
);

$nodes = $items->xpath('*[id = "1"]');
$nodes[0]->addChild('new', 'value');

echo $items->asXML();