在 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"
    }
  ]
}

毫无疑问,有更全面的库可用,或者可以应用一些工作来改善这种情况。