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”)
,但它很容易修复(只需添加一个堆栈来跟踪打开的组即可)。是的,确实如此,抱歉,我误解了库的工作方式!谢谢你的澄清!