如何解析GJS代码中的XML?具体来说,在gnome shell扩展中?我还没有找到任何东西,而且似乎也没有GJS XML库。此外,GJS似乎与nodejs不兼容,所以我不能使用xml-js或类似的东西?
我是不是错过了什么?
据我所知,目前(2019年10月(,GNOME平台中没有用于解析XML的内省库(例如gobject内省(。
假设XML是相当直接的,那么您应该能够使用一些现有的纯JavaScript解析器来实现这一点。我从中复制粘贴的第15-220行https://github.com/kawanet/from-xml/1,这对我来说效果不错。
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const ByteArray = imports.byteArray;
// from-xml pasted or imported here
let xmlText = GLib.file_get_contents('test.xml')[1];
if (xmlText instanceof Uint8Array)
xmlText = ByteArray.toString(xmlText);
let xmlParsed = parseXML(xmlText);
print(JSON.stringify(xmlParsed, null, 2));
text.xml
:中的这个XML
<tag>
<child/>
<child attr="bar">text</child>
</tag>
将此打印到控制台:
{
"f": [
{
"f": [
{
"f": [],
"n": "child",
"c": 1
},
{
"f": [
"text"
],
"n": "child",
"t": " attr="bar""
}
],
"n": "tag"
}
]
}
毫无疑问,现在有更全面的图书馆,或者可以做一些工作来改善这种情况。