Пишите CData в XML Dom правильным способом - PullRequest
0 голосов
/ 20 марта 2020

Я хочу выяснить, как написать узел 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>
...