3

Scala REPL では:

val input = <outerTag xmlns="http://xyz"> <innerTag> </innerTag> </outerTag>

input\\@"innerTag"

=>

<innerTag xmlns="http://xyz"> </innerTag>

Scalaがこれを行うのを止めるにはどうすればよいですか? なぜそれは私に与えることができないのです<innerTag> </innerTag>か?どうすればこれを止めることができますか (またはxmlns単に属性を削除できますか)?

ありがとう!

ジョー

明確化: 私の全体的なタスクは、XML ファイルを切り刻んで再結合することです。したがって、このノードはルート ノード (xmlns 属性を持つ) の下から取得され、再び xmlns を持つルートの下のドキュメントに統合されます。

4

4 に答える 4

3

入力ドキュメントでは、その親要素がその名前空間を持っていたため<innerTag>、論理名前空間を持っています。これが XML 名前空間の仕組みです。"http://xyz"<outerTag>

要素を単独で要求すると<innerTag>、Scala は親から名前空間宣言をコピーします。最初のドキュメントで明示的に記述されていなくても<outerTag>、名前空間は の論理的な部分であるためです。<innerTag>

名前空間を削除する場合は、追加の処理を実行する必要があります。

于 2009-10-21T15:41:29.580 に答える
3

Scala 2.8.0 で名前付きパラメーターと Elem.copy() を使用します。

scala> import scala.xml._
import scala.xml._

scala> val outer = <outerTag xmlns="http://xyz"><innerTag></innerTag></outerTag>
outer: scala.xml.Elem = <outerTag xmlns="http://xyz"><innerTag></innerTag></outerTag>

scala> outer \\ "innerTag" map { case e: Elem => e.copy(scope = TopScope) }
res0: scala.xml.NodeSeq = <innerTag></innerTag>
于 2009-10-21T16:45:12.173 に答える
1

ドキュメントのサブノードに変換を適用するときに、似たような問題に遭遇しました。結果のノードはすべて、ノード上に xmlns を持っていました。

変換が完了したら、次の関数を使用して、印刷のためにドキュメントを「クリーン」にしました。

def transformForPrinting(doc : Elem) : Elem = { 
 def stripNamespaces(node : Node) : Node = {
     node match {
         case e : Elem => 
             e.copy(scope = TopScope, child = e.child map (stripNamespaces))
         case _ => node;
     }
 }
 doc.copy( child = doc.child map (stripNamespaces) )}
于 2010-07-27T21:17:51.807 に答える
1

神様、何かが足りないといいのですが。こんなむずかしいことはありません

import scala.xml._
import scala.xml.tranform._

val rw = new RewriteRule { 
  override def transform(n: Node) = n match {
    case Elem(p, l, a, s, children@ _*) => Elem(p, l, a, TopScope, children: _*)
    case x => x
  }
  override def transform(ns: Seq[Node]): Seq[Node] = ns flatMap transform
}
val rt = new RuleTransformer(rw)

val input = <outerTag xmlns="http://xyz"> <innerTag> </innerTag> </outerTag>

val result = input \\ "innerTag" map rt

それとも、これが複雑すぎると考えるには Scala に甘やかされすぎているのでしょうか?

于 2009-10-21T16:40:16.093 に答える