gpt4 book ai didi

scala - 使用 scala.xml.pull 提取节点及其所有子节点的最佳方法?

转载 作者:行者123 更新时间:2023-12-02 06:13:15 26 4
gpt4 key购买 nike

我正在使用 scala.xml.pull 来解析一个很大的 xml 文件。这对于事件处理非常有用,但我想做的是让我的解析器为特定节点生成一个迷你文档,并且我没有看到一个简单的方法来做到这一点,或者至少不是“scala”方式。

我想构建一个像这样的搜索函数,它可以使用迭代器来查找与我的标签匹配的 EvElemStart 事件:

def seek(tag: String) = {
while (it.hasNext) {
it.next match {
case EvElemStart(_, `tag`, _, _) =>

在那之后我就不太清楚了。是否有一种简单的方法可以将此标记的所有子级抓取到文档中,而不必遍历 XMLEventReader 弹出的每个事件?

我最终寻找的是一个扫描文件并为特定标签或标签集的每个实例发出 xml 元素(Elem?)的进程,我可以使用正常的 scala xml 处理来处理这些实例。

最佳答案

这就是我最终所做的。 slurp(tag) 查找标签的下一个实例并返回该标签的完整节点树。

def slurp(tag: String): Option[Node] = {
while (it.hasNext) {
it.next match {
case EvElemStart(pre, `tag`, attrs, _) => return Some(subTree(tag, attrs))
case _ =>
}
}
return None
}

def subTree(tag: String, attrs: MetaData): Node = {
var children = List[Node]()

while (it.hasNext) {
it.next match {
case EvElemStart(_, t, a, _) => {
children = children :+ subTree(t, a)
}
case EvText(t) => {
children = children :+ Text(t)
}
case EvElemEnd(_, t) => {
return new Elem(null, tag, attrs, xml.TopScope, children: _*)
}
case _ =>
}
}
return null // this shouldn't happen with good XML
}

关于scala - 使用 scala.xml.pull 提取节点及其所有子节点的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13671067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com