I have an xml payload
<myXML>
<ctx>
<recipient>
<CardNumber>1245</CardNumber>
<age>16</age>
<height>180</height>
</recipient>
</ctx>
</myXML>
var xmlDoc = DOMDocument.fromXMLString(message).getElementsByTagName("myXML")[0].toXMLString();
which basically outputs starting from the ctx node.
I want to add a new node/element at a specific location using the insertBefore, but it isnt working for me, whas the correct method?
ref – https://experienceleague.adobe.com/developer/campaign-api/api/m-DOMNode-insertBefore.html
xmlDoc.insertBefore("<email>[email protected]</email>","<CardNumber>");
do I have to create the element? how do I insert it at a specific location? using insertBefore
var email = xmlDoc.createElement("email");
email.textContent = "[email protected]";
email.appendChild(ctx)
Here is how I achieved it
var myxml = <myXML>
<recipient>
<CardNumber>1245</CardNumber>
<age>16</age>
<height>180</height>
</recipient>
<recipient2>
<CardNumber1>1245</CardNumber1>
<age>16</age>
<height>180</height>
</recipient2>
</myXML>;
var xmlDoc = new DOMDocument.fromXMLString(myxml);
var root = xmlDoc.root;
var ctx = xmlDoc.createElement("ctx");
root.appendChild(ctx);
var emailElem = xmlDoc.createElement("email");
emailElem.textContent = "[email protected]";
var parent = xmlDoc.getElementsByTagName("CardNumber")[0].parentNode;
var email = xmlDoc.getElementsByTagName("CardNumber")[0];
parent.insertBefore(emailElem, email);
logInfo(xmlDoc.toXMLString())
The output is
<?xml version='1.0'?>
<myXML>
<recipient>
<email>[email protected]</email>
<CardNumber>1245</CardNumber>
<age>16</age>
<height>180</height>
</recipient>
<recipient2>
<CardNumber1>1245</CardNumber1>
<age>16</age>
<height>180</height>
</recipient2>
<ctx/>
</myXML>
2
Answers
I have no experience using Abode Campaign.
Using DOM methods in a browser or other environment that supports DOM manipulation, you can do something like the following, which inserts a
Node
, not text. See MDN’s Node: insertBefore() method.You can use query selector with CSS selectors to fetch element nodes.
Creating a node in DOM consists of two parts. You create the node using a document method and append/insert the node using a method of the node.
Classic (older) DOM methods like
appendChild()
orinsertBefore()
require a node argument. However modern DOM methods likeappend()
/before()
/after()
will create text nodes for string arguments and take multiple arguments.before()
allows to shorteninsertBefore()
calls:target.parentNode.insertBefore(newNode, target)
→target.before(newNode)