Я хочу выяснить, как написать узел CData и заменить его существующим узлом. Мой код:
let allureXML = await this.readStream(allureXMLPath);
if(allureXML.length!=0){
var allureDoc = new DOMParser().parseFromString(allureXML);
var cmpLink = '<a href="/diff?id=' + globalID + '">Compare</a> \n';
var oldnode = allureDoc.getElementsByTagName("stack-trace");
var mycdata = allureDoc.createCDATASection(cmpLink);
console.log(oldnode.toString());
console.log(mycdata.toString());
allureDoc.replaceChild(mycdata, oldnode[0]);
//var fromatedCompare = testdata.compare.replace(/},/g, '},\n');
//allureDoc.documentElement.getElementsByTagName("stack-trace")[0].childNodes[0]. data= cmpLink+fromatedCompare;
var xmlString = new XMLSerializer().serializeToString(allureDoc);
fs.writeFileSync(allureXMLPath, xmlString);
}
Во всех функция работает с одной стороны, а с другой - нет. Потому что он заменит полный узел "трассировки стека" с CData, без какого-либо узла. Но я хочу, чтобы новая информация о CData находилась внутри узла «stack-trace».
Раньше это было:
<failure>
<message>AssertionError: XML Vergleich fehlgeschlagen: expected [ Array(101) ] to deeply equal []</message>
<stack-trace>AssertionError: XML Vergleich fehlgeschlagen: expected [ Array(101) ] to deeply equal []</stack-trace>
</failure>
, а теперь это:
<failure>
<message>AssertionError: XML Vergleich fehlgeschlagen: expected [ Array(101) ] to deeply equal []</message>
<![CDATA[<a href="/diff?id=f220e330-6ac3-11ea-9b81-9b393a05ebdc">Compare</a>
]]>
</failure>
То, что я забыл заменить узел "трассировки стека" на CData так, У меня наконец будет
<failure>
<message>AssertionError: XML Vergleich fehlgeschlagen: expected [ Array(101) ] to deeply equal []</message>
<stack-trace><![CDATA[<a href="/diff?id=f220e330-6ac3-11ea-9b81-9b393a05ebdc">Compare</a> ]]></stack-trace>
</failure>