Scala XML,通过模式匹配删除节点

时间:2019-03-20 09:00:20

标签: xml scala pattern-matching

嗨,我有一个大的xml文件,我想使用模式匹配在其中删除某些节点。 xml的一部分如下所示:

<ddm:relation scheme="STREAMING_SURROGATE_RELATION">/path/to/somewhere/$id</ddm:relation>here
<ddm:relation randomattribute="que">something</ddm:relation>
<ddm:relation href="http:localhost:8080">que?</ddm:relation>

我要删除的唯一节点是顶部节点。我使用RuleTransformer来这样做。在变压器中,我使用以下模式匹配:

override def transform(node: Node): Seq[Node] = node match {
  case Elem(_, "relation", _, _, _ @ _*)    => NodeSeq.Empty
  case n => n
}

但这不能区分关系节点。如何仅删除具有属性scheme的节点?还是包含特定文本且具有模式匹配的节点?

1 个答案:

答案 0 :(得分:0)

以下代码有效:

  override def transform(node: Node): Seq[Node] = node match {
  case Elem(_, "relation", attr: MetaData, _, _ @ _*) if attr.prefixedKey == "scheme" => NodeSeq.Empty
  case n => n
}

有没有更干净的方法?