2011-07-21 16 views
2

最近、Javaのバックグラウンドに由来するScalaを使った作業に比較的新しいです。XMLからの要素名とプロパティ値の抽出

私は、XMLファイルを読み込み、データが括弧の間に囲まれている場所に含まれる要素名やプロパティを抽出するの効率的な手段を作成に関するアドバイスを求めています。

例えば

<いくつかの名前> {プロパティ} <いくつかの名前/>

ので、キーは{}

内に含まれるデータがある場合、私はその後、したいです{}の間に含まれる実際の要素名とプロパティ値でハッシュマップを作成します。

私は、これは過度に複雑ではないと確信しているが、私はフォーラム内の専門知識をオフにこの質問をバウンスしたいのですが、この時点で私の限られたScalaの専門知識を与えられました。答えるために時間を割いて誰にも

感謝します。

+0

実際の入力例と追加するキー/値はありますか?現在受け入れられている答えよりも優れた解決策があるかもしれません。 –

答えて

0

[UPDATED] はちょうどあなたがテキストではなく、XML関連の構文ブレースについての括弧について尋ねてきたことに気づきました。 可能答えは:

scala> val xml = <a> 
        <prop>{{key1}}</prop> 
        <prop>{{key2}}</prop> 
        <prop>notkey</prop> 
       </a> 
xml: scala.xml.Elem = <a><prop>{key1}</prop><prop>{key2}</prop><prop>notkey</prop></a> 

Scalaは代用品として{変数}を扱うので、私は、中括弧をエスケープする{}を倍増しました:

scala> val text="all your base are belong to us" 
text: java.lang.String = all your base are belong to us 

scala> val template = <a>{text}</a> 
template: scala.xml.Elem = <a>all your base are belong to us</a> 

今すぐ仕事に戻ります。指定された名前のサブノードを要するのみprop's使用\射影演算子を取る
。 xmlツリー内のすべてのsub-sub -...-サブノードを取るには、代わりに\\を使用します。

scala> val props = xml\"prop" 
props: scala.xml.NodeSeq = NodeSeq(<prop>{key1}</prop>, <prop>{key2}</prop>, <prop>notkey</prop>) 

val keys = props.filter (p => p.text.startsWith("{")) 
res3: scala.xml.NodeSeq = NodeSeq(<prop>{key1}</prop>, <prop>{key2}</prop>) 

実は、私はここに騙され、非所望の特性フィールドは notkey形{には存在しないことを想定しています。

scala> for(k <- keys) { 
    | println(k.label+":"+k.text) 
    | } 
prop:{key1} 
prop:{key2} 
+0

OM-NOM-NOM、このため 多くのおかげで、 は、それは私が待っていのだ指導と例のタイプです。 ゲイリー – Gary

+0

@Garyだから、その答えを受け入れてみませんか? ;) –

+0

申し訳ありませんが、私はそれを受け入れることを忘れてしまいました。 もう一度ありがとうございます。 – Gary

関連する問題