Как добавить новый узел в конкретном узле на xml от php dom

0

Я хочу вставить новый узел в определенный узел, но я понятия не имею, как это сделать

number.xml

<numbers>
   <number>1</number>
   <number>2</number>
   <number>3</number>
   <number>4</number>
   <number>5</number>
</numbers>

number.php

<?php
$xml = new DOMDocument();
$xml->formatOutput=true;
$xml -> load('number.xml');
$xml_subnumber = $xml->createElement("subNumber");
$xml_subnumber_text = $xml->createTextNode("3.3");
$xml_subnumber->appendChild($xml_subnumber_text);
//something here (I have no idea.)
$xml->save("number.xml") or die("Error");
?>

и я хочу, чтобы xml файл выглядел так...

<numbers>
   <number>1</number>
   <number>2</number>
   <number>3
     <subNumber>3.3</subNumber>
   </number>
   <number>4</number>
   <number>5</number>
</numbers>
Теги:
dom

1 ответ

1
Лучший ответ

Вам нужно найти number элемента узел и добавить новый узел к нему. Для этого XPath. /numbers/number[3] возвращает третий number узла элемента. Он вернет его в список, потому что выражения могут возвращать несколько узлов или узлов. Таким образом, тип результата всегда остается неизменным.

$xml = new DOMDocument();
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;

$xml->loadXml(
  '<numbers>
   <number>1</number>
   <number>2</number>
   <number>3</number>
   <number>4</number>
   <number>5</number>
  </numbers>'
);
$xpath = new DOMXpath($xml);

foreach ($xpath->evaluate('/numbers/number[3]') as $thirdNumber) {
  $subNumber = $thirdNumber->appendChild(
     $xml->createElement("subNumber")
  );
  $subNumber->appendChild($xml->createTextNode("3.3"));
}

echo $xml->saveXml();

Вывод:

<?xml version="1.0"?>
<numbers>
   <number>1</number>
   <number>2</number>
   <number>3<subNumber>3.3</subNumber></number>
   <number>4</number>
   <number>5</number>
</numbers>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню