Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
将XML解析为NodeSeq,如何读取根元素名称?_Xml_Scala - Fatal编程技术网

将XML解析为NodeSeq,如何读取根元素名称?

将XML解析为NodeSeq,如何读取根元素名称?,xml,scala,Xml,Scala,当我将XML文件/字符串作为NodeSeq读取时,如何获取根元素的名称 看起来有点基本,但我看不到一个立即明显的方法来做,看看 最简单的例子: 给定任意XML: <HelloWorld> <Foo>Bar</Foo> </HelloWorld> 获取根元素名称的最简单方法是什么,在本例中是“HelloWorld”?您可以使用head或headOption获取第一个节点,然后使用Node.label获取名称: import scala.xm

当我将XML文件/字符串作为
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