Разбор XML с помощью Scala с двоеточием (:) внутри XML-тега

#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, чтобы преобразовать значение в строку.