#xml #scala
#xml #scala
Вопрос:
Я застрял при разборе XML, в имени элемента которого есть «:».
Пример XML показан ниже:
val xml:String = <epp xmlns='urn:ietf:params:xml:ns:epp-1.0'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:schemaLocation='urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd'>
<command>
<create>
<host:create xmlns:host='urn:ietf:params:xml:ns:host-1.0'
xsi:schemaLocation='urn:ietf:params:xml:ns:host-1.0host-1.0.xsd'>
<host:name>ns-1.dns.net</host:name>
</host:create>
</create>
<clTRID>TRID-1-100043434343</clTRID>
</command>
</epp>
val dom = scala.xml.XML.loadString(xml)
val name = dom \ "host:name"
name
всегда пусто.
Мне нужно получить значение <host:name>
тега элемента. Пожалуйста, дайте мне знать, как это получить.
Ответ №1:
\
Оператор вводит в заблуждение. Он не принимает запросы XPath, только имена узлов. Если вы хотите выполнить фильтрацию по имени префикса — части перед : — эта часть запроса должна быть в scala. Что-то вроде этого должно сработать:
val name = (dom \ "name").filter(_.prefix == "host")
Комментарии:
1. Спасибо, теперь работает отлично. Мне пришлось добавить .text, чтобы преобразовать значение в строку.