изменить файл XML с помощью XMLDOM

Я не могу изменить свой xml с помощью XMLSerializer... Мой код

var xml = request.responseText;
var DOMParser = require( 'xmldom' ).DOMParser;
var parser = new DOMParser();
var document = parser.parseFromString( xml, 'text/xml' );
document.getElementsByTagName( "a:Value" ).nodeValue = 12345;
var XMLSerializer = require( 'xmldom' ).XMLSerializer;
var serializer = new XMLSerializer();
var writetofile = serializer.serializeToString( document );
console.log( "writetofile" + writetofile );

Я получаю XML с тем же старым значением, а не 12345.

Пожалуйста, дайте мне знать, как решить эту проблему.. перепробовал все варианты.. все еще не работает. :(


person n.bhv    schedule 28.10.2016    source источник


Ответы (2)


Попробуйте изменить строку 5 на

document.getElementsByTagName("a:Value")[0].childNodes[0].data = '124241';

Изменить

Вот код, который я написал на "runkit.com", чтобы продемонстрировать, как я решить проблему, как указано в комментарии.

// some make-up xml
var xml = `
<root>
    <a:table xmlns:a="http://www.w3schools.com/furniture">
      <a:name>African Coffee Table</a:name>
      <a:width>80</a:width>
      <a:length>120</a:length>
      <a:Value>old value</a:Value>
    </a:table>
</root>`;
var DOMParser = require( 'xmldom' ).DOMParser;
var parser = new DOMParser();
var document = parser.parseFromString( xml, 'text/xml' );

// this won't work, but no error
document.getElementsByTagName( "a:Value" ).nodeValue = 12345;

// check: you will get "undefined" on the console
console.log( document.getElementsByTagName("a:Value").nodeValue);

// check: you will get "old value" on the console
console.log( document.getElementsByTagName("a:Value")[0].childNodes[0].data );

// here is another try
document.getElementsByTagName("a:Value")[0].childNodes[0].data = '12345';

// next, you will get "12345" on the console as expected
console.log( document.getElementsByTagName("a:Value")[0].childNodes[0].data );

var XMLSerializer = require( 'xmldom' ).XMLSerializer;
var serializer = new XMLSerializer();
var xmlstring = serializer.serializeToString( document );
console.log( "xmlstring: \n" + xmlstring );

Соответствующий вывод из console.log():

undefined
old value
12345
xmlstring: 
<root>
    <a:table xmlns:a="http://www.w3schools.com/furniture">
      <a:name>African Coffee Table</a:name>
      <a:width>80</a:width>
      <a:length>120</a:length>
      <a:Value>12345</a:Value>
    </a:table>
</root>
person swatchai    schedule 28.10.2016
comment
Спасибо за ответ, swatchai.. но после внесения изменений, предложенных вами, все еще получает старое значение в XML. :( - person n.bhv; 04.11.2016

Спасибо за ответ снова .. appricited!!!

Я нашел решение, вставив сюда, надеюсь, это поможет другим использовать изменение свойства textContent ниже строки

document.getElementsByTagName( "a:Value" ).nodeValue = 12345;

to

document.getElementsByTagName( "a:Value" )[0].textcontent = 12345;

это сработало!!! теперь я получаю весь XML с измененными значениями. ваше здоровье!!

person n.bhv    schedule 11.11.2016