scala – XML插入/更新
发布时间:2020-12-16 09:26:40 所属栏目:安全 来源:网络整理
导读:你知道根据XPath插入和(或)更新节点的任何Scala API吗?例如,对于给定的Node和XPath,此API将使用新节点创建XML副本 谢谢 解决方法 您可以使用RewriteRule执行此操作,2.10.3 documentation. val cats = Cats Cat Name="Floyd"/ Cat Name="Onyx"//Cats 然后假
你知道根据XPath插入和(或)更新节点的任何Scala API吗?例如,对于给定的Node和XPath,此API将使用新节点创建XML副本
谢谢 解决方法
您可以使用RewriteRule执行此操作,2.10.3 documentation.
val cats = <Cats> <Cat Name="Floyd"/> <Cat Name="Onyx"/> </Cats> 然后假设RewriteRule class AddCat(name: String) extends RewriteRule { override def transform(n: Node): Seq[Node] = n match { case e: Elem if e.label == "Cats" => val cats = (e "Cat") val newCat = <Cat Name={name}/> new Elem(e.prefix,"Cats",e.attributes,e.scope,e.minimizeEmpty,(cats ++ newCat).toSeq:_*) case x => x } } 然后你可以做到, val rule = new RuleTransformer(new AddCat("Stevie")) rule.transform(cats) res2: Seq[scala.xml.Node] = List(<Cats><Cat Name="Floyd"/><Cat Name="Onyx"/><Cat Name="Stevie"/></Cats>) 同样,如果您想要更改属性 class AddLastName(name: String,lastName: String) extends RewriteRule { override def transform(n: Node): Seq[Node] = n match { case e: Elem if e.label == "Cat" && (e "@Name" text).equals(name) => val cat: String = e.attributes("Name").head.text e % Attribute(None,"Name",Text(s"$name $lastName"),Null) case x => x } } val rule = new RuleTransformer(new AddLastName("Stevie","Nicks")) rule.transform(cats) res3: Seq[scala.xml.Node] = List(<Cats><Cat Name="Floyd"/><Cat Name="Onyx"/><Cat Name="Stevie Nicks"/></Cats>) 这两种方法都可以满足您的需求.困难的部分是弄清楚如何到达孩子,然后建立父节点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |