使用Scala在XML标记内部使用冒号(:)解析XML

时间:2011-05-19 12:40:43

标签: 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 个答案:

答案 0 :(得分:10)

\\运算符具有误导性。它不接受XPath查询,只接受节点名称。如果要过滤前缀名称 - 前面的部分: - 查询的那部分必须在scala中。这样的事情应该有效:

val name = (dom \\ "name").filter(_.prefix == "host")