Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:使用回调以编程方式创建xml?_Xml_Scala_Tree - Fatal编程技术网

Scala:使用回调以编程方式创建xml?

Scala:使用回调以编程方式创建xml?,xml,scala,tree,Xml,Scala,Tree,我有一个通过树结构运行的库,它使用回调到类中。 一个简化的变体是: class CallBack { openGroup(name:String) closeGroup(name:String) item(name:String) } 因此,openGroup一步一步地进入树,closeGroup一步一步地退出,项目是叶子。 我想创建一个简单的xml结构 当我运行代码时。一个简单的解决办法是 执行类似以下伪代码的操作: class CallBack { var

我有一个通过树结构运行的库,它使用回调到类中。 一个简化的变体是:

class CallBack {
    openGroup(name:String)
    closeGroup(name:String)
    item(name:String)
}
因此,openGroup一步一步地进入树,closeGroup一步一步地退出,项目是叶子。 我想创建一个简单的xml结构 当我运行代码时。一个简单的解决办法是 执行类似以下伪代码的操作:

class CallBack {
    var xml:String = ""
    openGroup(name:String)  = { xml += "<ol label=" + name + ">"}
    closeGroup(name:String) = { xml += "</ol>" }
    item(name:String)       = { xml += "<li name=.... />" }
}
类回调{
var xml:String=“”
openGroup(名称:String)={xml+=“”}
closeGroup(名称:String)={xml+=“”}
项(名称:字符串)={xml+=“
  • ”} }
  • 我想一个更好的解决方案是使用节点、组等创建此节点。, 或其他相关技术,然后创建xml

    您知道如何以某种体面的方式从上面创建xml吗?

    如果您使用

    class CallBack(writer: Writer) {
        private val html = new Html(writer)
        def openGroup(name:String) = html.ol.label(name)
        def closeGroup(name:String) = html.end
        def item(name:String) = html.li.label(name).end
    }
    

    JATL看起来很酷,以前从未见过。但是,如果我读对了,你的代码的实际问题与我使用NodeSeq/时的问题是一样的。。。在常规scala中:它不能很好/简单地处理递归性质。考虑FLULLN调用序列:OpenGROM(“1”)项(“1。ITEM1”)OpenGROUP(“2”)项(“1.2。ITEM2”)关闭组(“2”)关闭组(“1”),我猜您的JATL解决方案不能应付这一点?@ BjONJ为什么不呢?它将生成一个很好的嵌套列表。还是你想要一些不同的行为?如前所述,如果您做了类似
    openGroup(“1”)这样的错误处理,它不会抛出异常;项目(“1.项目1”);closeGroup(“2”)
    ,但它很容易修复(只需添加一个
    堆栈来跟踪打开的组即可)。是的,确实如此,抱歉,我误解了库的工作方式!谢谢你的澄清!