2009-10-17 14 views
12

scala.xmlパッケージは、ラベル付きツリーのノードを持つXMLを表します。しかし、ElemElem親にアクセスする方法がないように見えるので、Scala 2.7ではこのツリーは一方向ですか?同じことが親のDocumentに適用されるようです。たとえば、XOMでは、ツリーのルートに向かって移動するには、getParentgetDocumentのアクセサがあります。 ScalaのXML APIでこれを行うことはできますか?Scalaの親要素にアクセスする方法XML

答えて

12

他の人に言われているように、効率的な不変構造にするための親リンクはありません。たとえば:

scala> val a = <parent><children>me</children></parent> 
a: scala.xml.Elem = <parent><children>me</children></parent> 

scala> val b = a.child(0) 
b: scala.xml.Node = <children>me</children> 

scala> val c = <newparent>{b}</newparent> 
c: scala.xml.Elem = <newparent><children>me</children></newparent> 

scala> a 
res0: scala.xml.Elem = <parent><children>me</children></parent> 

scala> b 
res1: scala.xml.Node = <children>me</children> 

scala> c 
res3: scala.xml.Elem = <newparent><children>me</children></newparent> 

ませデータ構造はコピーされませんでした。 bが指すノードは、acの両方で指し示されているノードと同じノードです。親を指し示す必要がある場合は、cで使用したときにそのコピーを作成する必要があります。

データ構造を自由にナビゲートするには、Purely Applicative XML Cursorが必要です。

3

しかし、このツリーはScalaでは単方向ですか?

はい。 scala.xmlの不変性へのアプローチにより、ノードは親を知らない。

1

単方向であるため、ノードはその親を認識しません。

DOMに変換することで問題を解決できる場合があります。このために標準ライブラリには何もないようですが、役に立つかもしれない件に関してはthis threadが見つかりました。

関連する問題