如何从Scala中的XML字符串中删除文本?

时间:2016-07-19 21:41:41

标签: xml scala

我有一个XML字符串,其中一些节点在标签之间有文本,如下所示:

<note>
<to>Text between tags</to>
<from>More text</from>
<empty />
</note>

在Scala中,如何删除这些标记之间的文本,以便得到这样的字符串?:

<note><to></to><from></from><empty /></note>

1 个答案:

答案 0 :(得分:2)

您可以使用RewriteRule并将文本节点设置为空,例如

val removeText = new RewriteRule {
  override def transform(n: Node): NodeSeq = n match  {
    case e: Text => NodeSeq.Empty
    case _ => n
  }
}

然后,您可以使用RuleTransformer转换您的XML,例如

  val source = scala.io.Source.fromFile("myData.xml")
  val lines = try source.mkString finally source.close()
  val xml = XML.loadString(lines)
  val output = new RuleTransformer(removeText).transform(xml)
  println(output)

输出: <note><to/><from/><empty/></note>