XML/XPath: Difference between revisions
Content added Content deleted
(→Scala: Use for-comprehension in solutions) |
|||
Line 2,477: | Line 2,477: | ||
=={{header|Scala}}== |
=={{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 |
The code is entered in to Scala's REPL, to |
||
better show the results. |
better show the results. |
||
<lang scala> |
|||
⚫ | |||
⚫ | |||
⚫ | |||
| <section name="health"> |
| <section name="health"> |
||
| <item upc="123456789" stock="12"> |
| <item upc="123456789" stock="12"> |
||
Line 2,510: | Line 2,509: | ||
| </section> |
| </section> |
||
| </inventory> |
| </inventory> |
||
⚫ | |||
<inventory title="OmniCorp Store #45x10^3"> |
|||
⚫ | |||
⚫ | |||
<name>Invisibility Cream</name> |
|||
<price>14.50</price> |
|||
<description>Makes you invisible</description> |
|||
⚫ | |||
<item upc="445322344" stock="18"> |
|||
<name>Levitation Salve</name> |
|||
<price>23.99</price> |
|||
<description>Levitate yourself for up to 3 hours per application</description> |
|||
⚫ | |||
⚫ | |||
<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 = |
scala> val firstItem = for { |
||
| firstSection <- (xml \ "section").headOption |
|||
⚫ | |||
| firstItem <- (firstSection \ "item").headOption |
|||
<item upc="123456789" stock="12"> |
|||
| } yield firstItem |
|||
⚫ | |||
⚫ | |||
<name>Invisibility Cream</name> |
<name>Invisibility Cream</name> |
||
<price>14.50</price> |
<price>14.50</price> |
||
<description>Makes you invisible</description> |
<description>Makes you invisible</description> |
||
</item> |
</item>) |
||
scala> |
scala> val prices = for { |
||
⚫ | |||
<price>14.50</price> |
|||
⚫ | |||
<price>23.99</price> |
|||
| price <- (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 |
|||
⚫ | |||
Freen Instameal</name>, <name>Grob winglets</name>) |
|||
scala> val |
scala> val names = for { |
||
| section <- (xml \ "section").toArray |
|||
values: Array[String] = Array(Invisibility Cream, Levitation Salve, Blork and Freen Instameal, Grob winglets)</lang> |
|||
⚫ | |||
⚫ | |||
| } yield name.text |
|||
⚫ | |||
=={{header|Sidef}}== |
=={{header|Sidef}}== |