在 GJS 中解析 XML?
Parse XML in GJS?
如何在 GJS 代码中解析 XML?具体来说,在 gnome shell 扩展中?我什么都没找到,而且好像也没有GJS XML库。还有,GJS好像和nodejs不兼容,所以不能用xml-js之类的?
我是不是漏掉了什么?
据我所知,目前(2019 年 10 月)GNOME 平台中还没有用于解析的内省库(例如 gobject-introspection)XML。
假设 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"
}
]
}
毫无疑问,有更全面的库可用,或者可以应用一些工作来改善这种情况。
如何在 GJS 代码中解析 XML?具体来说,在 gnome shell 扩展中?我什么都没找到,而且好像也没有GJS XML库。还有,GJS好像和nodejs不兼容,所以不能用xml-js之类的?
我是不是漏掉了什么?
据我所知,目前(2019 年 10 月)GNOME 平台中还没有用于解析的内省库(例如 gobject-introspection)XML。
假设 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"
}
]
}
毫无疑问,有更全面的库可用,或者可以应用一些工作来改善这种情况。