【问题标题】:Parse XML in GJS?在 GJS 中解析 XML?
【发布时间】:2020-03-08 04:02:20
【问题描述】:

如何在 GJS 代码中解析 XML?具体来说,在 gnome shell 扩展中?我还没有找到任何东西,而且似乎没有 GJS XML 库。还有,GJS好像和nodejs不兼容,所以不能用xml-js之类的?

我错过了什么吗?

【问题讨论】:

    标签: xml gnome-shell-extensions gjs


    【解决方案1】:

    据我所知,目前(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"
        }
      ]
    }
    

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

    【讨论】:

    • 所以我没有错过任何东西。这很可悲:(我已经接受了你的回答,但我认为我不会听从你的建议:)那个模块感觉有点……片状。我将继续我当前的 hack,它调用一个小的 Python 脚本,该脚本读取 XML 并发出带有相关子集的简单 JSON。
    • 嗯,值得指出的是,您可以在 GJS 中做的所有事情都是使用内省的 C 库。因此,您可以编写一个简单的库,可能基于g_markup_* 函数并为其生成 GIR。不幸的是,除非遇到缺少 XML 解析器的人这样做,否则将继续没有好的选择。
    • 我不熟悉 Gobject,也不是特别喜欢编写 C,所以恐怕这超出了简单的搜索提供程序扩展的范围 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 2014-05-13
    • 2016-10-31
    • 2015-12-25
    • 2012-02-07
    • 2010-12-02
    相关资源
    最近更新 更多