2011-01-07 3 views
7

ऐसा लगता है कि विशेषता मान Seq[Node] प्रकार के हैं।स्कैला एक्सएमएल एपीआई: क्यों नोडसेक विशेषता मान के रूप में अनुमति देता है?

scala> <a b="1"/>.attribute("b")    
res11: Option[Seq[scala.xml.Node]] = Some(1) 

इसका मतलब है आप एक विशेषता मान के रूप में एक्सएमएल असाइन कर सकते हैं।

scala> <a b={<z><x/></z>}/>.attribute("b")    
res16: Option[Seq[scala.xml.Node]] = Some(<z><x></x></z>) 

scala> <a b={<z><x/></z>}/>.attribute("b").map(_ \ "x") 
res17: Option[scala.xml.NodeSeq] = Some(<x></x>) 

scala> new xml.PrettyPrinter(120, 2).format(<a b={<z><x/></z>}/>) 
res19: String = <a b="<z><x></x></z>"></a> 

यह मेरे लिए मजेदार लगता है। मैंने वास्तविक दुनिया में एक्सएमएल को एट्रिब्यूट वैल्यू के रूप में कभी नहीं देखा है। इसकी अनुमति क्यों है? एक विशेषता मान क्यों नहीं है String टाइप करें?

उत्तर

4

बुराक एमिर द्वारा scala.xml "draft" book से:

बोली

पहली नजर में शुरू करते हैं, ऐसा लगता है कि गुण ही तार और कुछ नहीं होना चाहिए। हालांकि, एक ही तरह के नोड्स (तत्व नोड्स के अलावा) को अनुमति देने के दो कारण हैं जो एक्सएमएल के भीतर प्रकट हो सकते हैं: डेटा मान और इकाई संदर्भ।

<foo name= "s&uuml;ss" life={Atom(42)}> 

अंत बोली

अब मैं 2.8.0 में है कि कोशिश की है और यह काफी संकलन नहीं करता है - मैं new Atom(42) उपयोग करने के लिए की जरूरत है। लेकिन मैं कुछ इस तरह लिख सकते हैं:

<foo name={List(Text("s"), EntityRef("uuml"), Text("ss"))}/> 

ताकि विशेषताओं के लिए नोड्स लाभ के लिए तर्क का हिस्सा था। और हाँ यह थोड़ा फंकी है।

संबंधित मुद्दे