我有一个XML有效负载

   <myXML>
      <ctx>
       <recipient>
          <CardNumber>1245</CardNumber>
          <age>16</age>
          <height>180</height>          
       </recipient>
      </ctx>
   </myXML>


  var xmlDoc = DOMDocument.fromXMLString(message).getElementsByTagName("myXML")[0].toXMLString();

它基本上从CTX node 开始输出.

我想使用插入在特定位置添加一个新的 node /元素前面,但它对我不起作用,正确的方法是什么?

REF-https://experienceleague.adobe.com/developer/campaign-api/api/m-DOMNode-insertBefore.html

  xmlDoc.insertBefore("<email>david@garcia.com</email>","<CardNumber>");

我必须创建元素吗?如何将其插入到特定位置?使用insertBefore

  var email = xmlDoc.createElement("email");
      email.textContent = "david@garcia.com";
      email.appendChild(ctx)

以下是我如何做到这一点的

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 = "david@garcia.com";
  var parent = xmlDoc.getElementsByTagName("CardNumber")[0].parentNode;
  var email = xmlDoc.getElementsByTagName("CardNumber")[0];
  
  parent.insertBefore(emailElem, email);
  
logInfo(xmlDoc.toXMLString())

输出为

<?xml version='1.0'?>
<myXML>
  <recipient>
    <email>david@garcia.com</email>
    <CardNumber>1245</CardNumber>
    <age>16</age>
    <height>180</height>
  </recipient>
  <recipient2>
    <CardNumber1>1245</CardNumber1>
    <age>16</age>
    <height>180</height>
  </recipient2>
  <ctx/>
</myXML>

推荐答案

我没有使用Abode Campaign的经验.

在浏览器或其他支持DOM操作的环境中使用DOM方法,可以执行以下操作,插入Node,而不是文本.见MDN's Node: insertBefore() method.

var parser = new DOMParser();
var xml = parser.parseFromString(`<myXML>
      <ctx>
       <recipient>
          <CardNumber>1245</CardNumber>
          <age>16</age>
          <height>180</height>          
       </recipient>
      </ctx>
   </myXML>`, "text/xml");

var email = xml.createElement("email");
email.textContent = "david@garcia.com";

xml.querySelector("recipient")
.insertBefore(
  email, 
  xml.querySelector("recipient")
 .firstElementChild
);

Javascript相关问答推荐

使用axios.获取实时服务器时的404响应

在React中获取数据后,如何避免不必要的组件闪现1秒?

Google图表时间轴—更改hAxis文本 colored颜色

使用Java脚本根据按下的按钮更改S文本

使用JQuery单击元素从新弹出窗口获取值

制作钢琴模拟器,并且在控制台中不会执行或显示该脚本

在VS代码上一次设置多个变量格式

以编程方式聚焦的链接将被聚焦,但样式不适用

当我点击一个按钮后按回车键时,如何阻止它再次被点击

如何找到带有特定文本和测试ID的div?

输入的值的类型脚本array.排序()

如何根据输入数量正确显示alert ?

如何通过Axios在GraphQL查询中发送数组

用于测试其方法和构造函数的导出/导入类

TypeORM QueryBuilder限制联接到一条记录

我怎样才能点击一个元素,并获得一个与 puppeteer 师导航页面的URL?

输入数据覆盖JSON文件

使用Java脚本替换字符串中的小文本格式hashtag

如何在preLoad()中自定义p5.js默认加载动画?

调试jQuery代码以获取所有行的总和(票证类型)