我有一些看起来像这样的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>
我想在Scala中加载此XML并删除<a:updated>
标记中的所有文本。我怎样才能做到这一点?对Scala来说还是新手,无法弄清楚这一点。
答案 0 :(得分: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/>