使用Scala进行XML解析:相当于JS中的“getElementByTagName(name
发布时间:2020-12-16 18:10:59 所属栏目:安全 来源:网络整理
导读:Scala中的XML解析似乎并不像应该的那样容易和直接. 我需要的是与JavaScript中的document.getElementsByTagName(name)类似的东西,但出于我的目的,我所需要的只是特定标记名的第一个元素.这是我最终得到的: import scala.xml.{Document,Elem,Node}import scal
Scala中的XML解析似乎并不像应该的那样容易和直接.
我需要的是与JavaScript中的document.getElementsByTagName(name)类似的东西,但出于我的目的,我所需要的只是特定标记名的第一个元素.这是我最终得到的: import scala.xml.{Document,Elem,Node} import scala.xml.parsing.ConstructingParser def _getFirstMatchingElementByName(search: String,n: Node): Option[Node] = { if (n.label == search) { Some(n) } else { var i = 0 var result: Option[Node] = None try { while (result == None) { result = _getFirstMatchingElementByName(search,n.child(i)) i += 1 } } catch { case e: IndexOutOfBoundsException => None } result } } 它基本上都会一直进行,直到找到匹配或所有可能性都用完为止. 既然已经发布了我具备此功能所需的功能,我已经对此进行了更多评论,这真的让我感到困惑.我确信有许多Java库可用于帮助解析XML,但考虑到Scala用于生成XML的原生支持(即它几乎可以在任何地方进行内联),我很好奇我是否遗漏了某些内容. 在Scala中有更好的方法吗? 解决方法
你做错了!
我需要的只是特定标记名称的第一个元素 给出这个xml: val page = <root> <need>text1</need> <doesnotneed>text2</doesnotneed> <doesnotneed>text3</doesnotneed> <need>text4</need> </root> 现在调用此代码将为您提供具有给定标记名称的所有节点的列表: scala> page "need" res3: scala.xml.NodeSeq = NodeSeq(<need>text1</need>,<need>text4</need>) 只获得第一个: scala> page "need" head res4: scala.xml.Node = <need>text1</need> 附:深度第一元素将被视为头部. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |