Когда я прочитал XML-файл/строку как NodeSeq
, как получить имя корневого элемента?Анализ XML как NodeSeq, как читать имя корневого элемента?
Кажется, что это простой, но я не вижу сразу очевидного способа сделать это, глядя на NodeSeq
API.
Минимальный пример:
Учитывая произвольный XML:
<HelloWorld>
<Foo>Bar</Foo>
</HelloWorld>
И код, который загружает его как NodeSeq
:
val xml: NodeSeq = XML.loadString(xmlString)
Что самый простой способ получить имя корневого элемента, в этот случай "HelloWorld"
?
Спасибо! Поскольку хорошо сформированные документы XML всегда имеют один корневой элемент, 'foreach' выглядит немного странно; Я бы, вероятно, пошел с 'val rootName = nodes.headOption.map (_. Label) .get' – Jonik
Если вы уверены, что ваш XML-документ имеет корневой элемент, вы можете сделать' nodes.head.label'. ('foreach' - это просто простой способ выполнить функцию побочного эффекта на' Option'). –
XML.loadString() выдает исключение SAXParseException, если вы передаете строку, которая не является правильно сформированным XML, так что да, я уверен. :) (Просто попробовал его с пустой строкой, произвольной не-XML-строкой и строкой XML с несколькими корневыми узлами.) Таким образом, здесь «headoption» просто усложняет код без необходимости, и, действительно, «head.label» - это способ пойти , Можете ли вы обновить ответ? – Jonik