【发布时间】:2020-03-08 04:02:20
【问题描述】:
如何在 GJS 代码中解析 XML?具体来说,在 gnome shell 扩展中?我还没有找到任何东西,而且似乎没有 GJS XML 库。还有,GJS好像和nodejs不兼容,所以不能用xml-js之类的?
我错过了什么吗?
【问题讨论】:
标签: xml gnome-shell-extensions gjs
如何在 GJS 代码中解析 XML?具体来说,在 gnome shell 扩展中?我还没有找到任何东西,而且似乎没有 GJS XML 库。还有,GJS好像和nodejs不兼容,所以不能用xml-js之类的?
我错过了什么吗?
【问题讨论】:
标签: xml gnome-shell-extensions gjs
据我所知,目前(2019 年 10 月)GNOME 平台中还没有用于解析 XML 的自省库(例如 gobject-introspection)。
假设 XML 相当简单,您应该能够使用一些现有的纯 JavaScript 解析器来做到这一点。我从https://github.com/kawanet/from-xml/ 1 复制粘贴了第 15-220 行,这对我来说效果很好。
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"
}
]
}
毫无疑问,有更全面的库可用,或者可以进行一些工作来改善这种情况。
【讨论】:
g_markup_* 函数并为其生成 GIR。不幸的是,除非遇到缺少 XML 解析器的人这样做,否则将继续没有好的选择。