Jump to content

XML/XPath: Difference between revisions

968 bytes removed ,  5 years ago
→‎Scala: Use for-comprehension in solutions
(→‎Scala: Use for-comprehension in solutions)
Line 2,477:
 
=={{header|Scala}}==
The problem description isn't clear on whether what
is wanted is the element or the text. Because of that,
I'm doing both except for the first problem.
 
The commandscode areis beingentered inputtedin intoto Scala's REPL, to
better show the results.
 
<lang scala>
<lang scala>scala> val xml = <inventory title="OmniCorp Store #45x10^3">
scala> val xml: scala.xml.Elem =
<lang scala>scala> val xml = | <inventory title="OmniCorp Store #45x10^3">
| <section name="health">
| <item upc="123456789" stock="12">
Line 2,510 ⟶ 2,509:
| </section>
| </inventory>
xml: scala.xml.Elem =
<inventory title="OmniCorp Store #45x10^3">
<section name="health">
<item upc="123456789" stock="12">
<name>Invisibility Cream</name>
<price>14.50</price>
<description>Makes you invisible</description>
</item>
<item upc="445322344" stock="18">
<name>Levitation Salve</name>
<price>23.99</price>
<description>Levitate yourself for up to 3 hours per application</description>
</item>
</section>
<section name="food">
<item upc="485672034" stock="653">
<name>Blork and Freen Instameal</name>
<price>4.95</price>
<description>A tasty meal in a tablet; just add water</description>
</item>
<item upc="132957764" stock="44">
<name>Grob winglets</name>
<price>3.56</price>
<description>Tender winglets of Grob. Just add water</description>
</item>
</section>
</inventory>
 
scala> val firstItem = xmlfor \\ "item" head{
| firstSection <- (xml \ "section").headOption
firstItem: scala.xml.Node =
| firstItem <- (firstSection \ "item").headOption
<item upc="123456789" stock="12">
| } yield firstItem
firstItem: Option[scala.xml.Node] =
Some(<item upc="123456789" stock="12">
<name>Invisibility Cream</name>
<price>14.50</price>
<description>Makes you invisible</description>
</item>)
 
scala> xmlval \\prices "price"= foreachfor println{
| section </- (xml \ "section>")
<price>14.50</price>
| item <- (section name=\ "healthitem">)
<price>23.99</price>
< | price>4.95 </- (item \ "price>")
| } yield scala.math.BigDecimal(price.text)
<price>3.56</price>
prices: List[scala.math.BigDecimal] = List(14.50, 23.99, 4.95, 3.56)
 
scala> val salesTax = prices.sum * 0.05
scala> xml \\ "price" map (_ text) foreach println
salesTax: scala.math.BigDecimal = 2.3500
14.50
23.99
4.95
3.56
 
scala> println(salesTax.setScale(2, BigDecimal.RoundingMode.HALF_UP))
scala> val elements = xml \\ "name" toArray
2.35
elements: Array[scala.xml.Node] = Array(<name>Invisibility Cream</name>, <name>Levitation Salve</name>, <name>Blork and
Freen Instameal</name>, <name>Grob winglets</name>)
 
scala> val valuesnames = xmlfor \\ "name" map (_ text) toArray{
| section <- (xml \ "section").toArray
values: Array[String] = Array(Invisibility Cream, Levitation Salve, Blork and Freen Instameal, Grob winglets)</lang>
| item <- (section </\ "item>")
| name </- (item> \ "name")
| } yield name.text
elementsnames: Array[scala.xml.NodeString] = Array(<name>Invisibility Cream</name>, <name>Levitation Salve</name>, <name>Blork and Freen Instameal, Grob winglets)</lang>
 
=={{header|Sidef}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.