将XML解析为NodeSeq,如何读取根元素名称?
当我将XML文件/字符串作为将XML解析为NodeSeq,如何读取根元素名称?,xml,scala,Xml,Scala,当我将XML文件/字符串作为NodeSeq读取时,如何获取根元素的名称 看起来有点基本,但我看不到一个立即明显的方法来做,看看 最简单的例子: 给定任意XML: <HelloWorld> <Foo>Bar</Foo> </HelloWorld> 获取根元素名称的最简单方法是什么,在本例中是“HelloWorld”?您可以使用head或headOption获取第一个节点,然后使用Node.label获取名称: import scala.xm
NodeSeq
读取时,如何获取根元素的名称
看起来有点基本,但我看不到一个立即明显的方法来做,看看
最简单的例子:
给定任意XML:
<HelloWorld>
<Foo>Bar</Foo>
</HelloWorld>
获取根元素名称的最简单方法是什么,在本例中是
“HelloWorld”
?您可以使用head
或headOption
获取第一个节点
,然后使用Node.label
获取名称:
import scala.xml.XML
val nodes = XML.loadString("""
<HelloWorld>
<Foo>Bar</Foo>
</HelloWorld>
""")
val label = nodes.head.label // String: HelloWorld
谢谢由于格式良好的XML文档总是有一个根元素,
foreach
看起来有点奇怪;我可能会选择val rootName=nodes.headOption.map(u.label).get
如果您确定XML文档有根元素,可以执行nodes.head.label
。(foreach
只是对选项
执行副作用函数的一种简单方法)XML.loadString()会在传递格式不正确的XML字符串时引发SAXParseException,因此,我确信:)(只使用空字符串、任意非XML字符串和具有多个根节点的XML字符串进行了尝试。)因此,这里的headoption
只是不必要地使代码复杂化,实际上head.label
是一种方法。你能更新答案吗?XML.loadString
返回一个元素(NodeSeq的子类),它有自己的标签
。不需要检查头部
@Dylan:谢谢,观察得很好。这使我考虑在正在使用的应用程序中更改内部API以接受EELM而不是NoDESEQ,但是后来我意识到我的XML处理的一个起点(除了<代码> XML.LooSosix),它给出了<代码>选项[NODESeq] < /Cord>。所以我需要在那里做一个转换;不确定是否值得。。。
import scala.xml.XML
val nodes = XML.loadString("""
<HelloWorld>
<Foo>Bar</Foo>
</HelloWorld>
""")
val label = nodes.head.label // String: HelloWorld
XML.loadString(xmlString).label