0

I want to insert new node to specific node but I have no idea how to do it

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");
?>

and I want the xml file seem like this...

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

1 Answer 1

1

You need to find the number element node and append the new node to it. Here is XPath for that. /numbers/number[3] will return the third number element node. It will return it in a list, because expressions could return several nodes or no nodes. This way the result type always stays the same.

$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();

Output:

<?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>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.