【问题标题】:Node + xmldom: How do I change the value of a single XML field in javascript?Node + xmldom:如何更改 javascript 中单个 XML 字段的值?
【发布时间】:2015-12-27 08:05:49
【问题描述】:

使用node v.0.10.29、Express v4.12.0 和xmldom v0.1.19,我正在尝试执行以下操作:

步骤

  1. XML 文件读入字符串
  2. 使用xmldom将字符串转换为XML对象
  3. <name>default</name> 字段设置为<name>test</name>
  4. 将 XML 对象转换回字符串

问题

问题是我设置<name> 字段后,它在对象中设置正确,但是当我将其转换为字符串时,<name> 字段又恢复为旧值(错误) .

代码

代码如下:

var fs = require('fs');
var DOMParser = require('xmldom').DOMParser;
var XMLSerializer = require('xmldom').XMLSerializer;
var filename = "myFile.xml";

fs.readFile(filename, "utf-8", function (err,data) 
{
    //CREATE/PARSE XML OBJECT FROM STRING
    var customerConfig = new DOMParser().parseFromString(data);

    //SET VALUE TO "TEST" (<name>default</name> TO <name>test</name>)
    customerConfig.getElementsByTagName("name")[0].childNodes[0].nodeValue = "test";

    //THIS OUTPUTS "test" WHICH IS CORRECT - 
    console.log(customerConfig.getElementsByTagName("name")[0].childNodes[0].nodeValue);

    //SERIALIZE TO STRING
    var xmlString = new XMLSerializer().serializeToString(customerConfig);

    //THIS OUTPUTS THE FULL XML FILE, 
    //BUT STILL SHOWS <name>default</name> AND NOT <name>test</name>
    console.log(xmlString);
});

问题是字符串中的&lt;name&gt; 字段没有设置为test...我在想序列化部分有问题? 有人知道我做错了吗?

谢谢!!

【问题讨论】:

    标签: javascript node.js xml-parsing xml-serialization domparser


    【解决方案1】:

    嗯,我发现了问题!

    我正在设置 nodeValue,但我确实需要设置 data。所以我改变了

    customerConfig.getElementsByTagName("name")[0].childNodes[0].nodeValue = "test";
    

    customerConfig.getElementsByTagName("name")[0].childNodes[0].data= "test";
    

    然后就成功了!

    【讨论】:

    • 非常感谢您的问答。它为我节省了无数时间。只是为了我自己的记录。 1.要设置的新值必须是字符串; 2.firstChild可以代替childNodes[0]
    猜你喜欢
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多