我正在使用cheerio来改变节点中的xml文件。我在<target>
之后插入节点/元素<source>
,它与insertAfter()
中的oldEl.translation.insertAfter(msgSourceEl);
api一起使用。
然而,我松开了我的压力:
<trans-unit id="title" datatype="html">
<source>Login</source><target>iniciar sesión</target>
是否有可能或有办法缩进<target>iniciar sesión</target>
元素下面新插入的<source>
?
答案 0 :(得分:1)
可以使用xml-beautifier
来实现人类可读的缩进XML
import beautify from 'xml-beautifier';
const HumanXML = beautify(XML);
console.log(HumanXML); // => will output correctly indented elements
Cheerio
:在下面的示例中,我们将使用xml2js
将XML作为JSON进行操作,然后将其构建回原始XML格式
var xml2js = require('xml2js');
var xml = "<trans-unit id=\"title\" datatype=\"html\"><source>Login</source></trans-unit>"
xml2js.parseString(xml, function (err, result) {
result["trans-unit"].target=["iniciar sessión"]
var builder = new xml2js.Builder();
var xml = builder.buildObject(result);
console.log(xml)
});
最终输出:
<trans-unit id="title" datatype="html">
<source>Login</source>
<target>iniciar sessión</target>
</trans-unit>
我确信你这样做是循环的一部分,所以不应该推断这个例子来使它工作。我建议通常使用underscore
(每个,地图,缩小,过滤......)
答案 1 :(得分:0)
首先,由于 source 是一个空元素,cheerio 不保留 <source>Login</source>
。它将其转换为 <source>Login
因此为了演示元素缩进,我将使用 <source2>
元素。
如下所示,在给定的 html 中提供换行符和制表符可以解决这个问题。
let $ = require('cheerio').load(`
<trans-unit id="title" datatype="html">
<source2>Login</source2>
</trans-unit>`)
$(`
<target>iniciar sesión</target>`).insertAfter($('source2'));
console.log($.html('trans-unit'))
输出
<trans-unit id="title" datatype="html">
<source2>Login</source2>
<target>iniciar sesión</target>
</trans-unit>