2016-07-20 1 views
0

У меня есть XML, который выглядит следующим образом:Удалить текст в конкретном узле XML в Scala?

<a:feed> 
    <a:id>http://localhost:8089/</a:id> 
    <a:entry> 
     <a:id>test1</a:id> 
     <a:title/> 
     <a:summary/> 
     <a:updated>2016-07-05T13:34:37Z</a:updated> 
     <a:author> 
     <a:name/> 
     </a:author> 
     <a:link rel="edit" href="test1"/> 
     <a:category> 
    </a:entry> 
    <a:entry> 
     <a:id>test2</a:id> 
     <a:title/> 
     <a:summary/> 
     <a:updated>2016-07-05T13:34:39Z</a:updated> 
     <a:author> 
     <a:name/> 
     </a:author> 
     <a:link rel="edit" href="test2"/> 
     <a:category> 
    </a:entry> 
</a:feed> 

Я хочу, чтобы загрузить этот XML в Scala и удалить весь текст в <a:updated> тегов. Как я могу это сделать? Все еще нова для Scala, не может понять это.

ответ

0

Как и в вашем previous question, вы можете использовать RewriteRule совместно с RuleTransformer. Учитывая конкретную форму ваших тегов, вы можете напрямую сопоставить их.

val removeText = new RewriteRule { 
    override def transform(n: Node): NodeSeq = n match { 
    case <a:updated>{_}</a:updated> => <a:updated></a:updated> 
    case _ => n 
    } 
} 

val output = new RuleTransformer(removeText).transform(xml) 

Однако, обратите внимание, что ваш входной XML немного уродливы - в <a:category> теги не закрыты. Это исправлено, я получил следующее взаимодействие в scala:

scala> val xml= <a:feed> 
    |    <a:id>http://localhost:8089/</a:id> 
    |    <a:entry> 
    |     <a:id>test1</a:id> 
    |     <a:title/> 
    |     <a:summary/> 
    |     <a:updated>2016-07-05T13:34:37Z</a:updated> 
    |     <a:author> 
    |     <a:name/> 
    |     </a:author> 
    |     <a:link rel="edit" href="test1"/> 
    |     <a:category/> 
    |    </a:entry> 
    |    <a:entry> 
    |     <a:id>test2</a:id> 
    |     <a:title/> 
    |     <a:summary/> 
    |     <a:updated>2016-07-05T13:34:39Z</a:updated> 
    |     <a:author> 
    |     <a:name/> 
    |     </a:author> 
    |     <a:link rel="edit" href="test2"/> 
    |     <a:category/> 
    |    </a:entry> 
    |   </a:feed> 
xml: scala.xml.Elem = .. 

scala> val output = new RuleTransformer(removeText).transform(xml) 
output: Seq[scala.xml.Node] = 
     <a:feed> 
      <a:id>http://localhost:8089/</a:id> 
      <a:entry> 
       <a:id>test1</a:id> 
       <a:title/> 
       <a:summary/> 
       <a:updated></a:updated> 
       <a:author> 
       <a:name/> 
       </a:author> 
       <a:link rel="edit" href="test1"/> 
       <a:category/> 
      </a:entry> 
      <a:entry> 
       <a:id>test2</a:id> 
       <a:title/> 
       <a:summary/> 
       <a:updated></a:updated> 
       <a:author> 
       <a:name/> 
       </a:author> 
       <a:link rel="edit" href="test2"/> 
       <a:category/> 
      </a:entry> 
     </a:feed/> 
Смежные вопросы