Extensible Markup Language
The Extensible Markup Language (XML) is a simple text-based format for representing structured information: documents, data, configuration, books, transactions, invoices, and much more.
Under the hood Foldr uses the FluidXML package. You can read more about the package here.
Reading XML Files
To read an XML file we call the read method on the mash.xml object. This returns an instance of the FluidXML object.
read
mash.xml.read(File: file) -> FluidXML
Creates a FluidXML object.
Parameters
file
A Foldr file object whose content will be parsed as an XML document.
Natural
set file to mash.file(4, "books.xml")
set xml to mash.xml.read(file)
printline xml
Standard
file = mash.file(4, "books.xml")
xml = mash.xml.read(file)
printline xml
Output
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
<book id="bk103">
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology
society in England, the young survivors lay the
foundation for a new society.</description>
</book>
<book id="bk104">
<author>Corets, Eva</author>
<title>Oberon's Legacy</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2001-03-10</publish_date>
<description>In post-apocalypse England, the mysterious
agent known only as Oberon helps to create a new life
for the inhabitants of London. Sequel to Maeve
Ascendant.</description>
</book>
<book id="bk105">
<author>Corets, Eva</author>
<title>The Sundered Grail</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2001-09-10</publish_date>
<description>The two daughters of Maeve, half-sisters,
battle one another for control of England. Sequel to
Oberon's Legacy.</description>
</book>
<book id="bk106">
<author>Randall, Cynthia</author>
<title>Lover Birds</title>
<genre>Romance</genre>
<price>4.95</price>
<publish_date>2000-09-02</publish_date>
<description>When Carla meets Paul at an ornithology
conference, tempers fly as feathers get ruffled.</description>
</book>
<book id="bk107">
<author>Thurman, Paula</author>
<title>Splish Splash</title>
<genre>Romance</genre>
<price>4.95</price>
<publish_date>2000-11-02</publish_date>
<description>A deep sea diver finds true love twenty
thousand leagues beneath the sea.</description>
</book>
<book id="bk108">
<author>Knorr, Stefan</author>
<title>Creepy Crawlies</title>
<genre>Horror</genre>
<price>4.95</price>
<publish_date>2000-12-06</publish_date>
<description>An anthology of horror stories about roaches,
centipedes, scorpions and other insects.</description>
</book>
<book id="bk109">
<author>Kress, Peter</author>
<title>Paradox Lost</title>
<genre>Science Fiction</genre>
<price>6.95</price>
<publish_date>2000-11-02</publish_date>
<description>After an inadvertant trip through a Heisenberg
Uncertainty Device, James Salway discovers the problems
of being quantum.</description>
</book>
<book id="bk110">
<author>O'Brien, Tim</author>
<title>Microsoft .NET: The Programming Bible</title>
<genre>Computer</genre>
<price>36.95</price>
<publish_date>2000-12-09</publish_date>
<description>Microsoft's .NET initiative is explored in
detail in this deep programmer's reference.</description>
</book>
<book id="bk111">
<author>O'Brien, Tim</author>
<title>MSXML3: A Comprehensive Guide</title>
<genre>Computer</genre>
<price>36.95</price>
<publish_date>2000-12-01</publish_date>
<description>The Microsoft MSXML3 parser is covered in
detail, with attention to XML DOM interfaces, XSLT processing,
SAX and more.</description>
</book>
<book id="bk112">
<author>Galos, Mike</author>
<title>Visual Studio 7: A Comprehensive Guide</title>
<genre>Computer</genre>
<price>49.95</price>
<publish_date>2001-04-16</publish_date>
<description>Microsoft Visual Studio 7 is explored in depth,
looking at how Visual Basic, Visual C++, C#, and ASP+ are
integrated into a comprehensive development
environment.</description>
</book>
</catalog>
Working with XML data
Below is a more detailed example of working with an XML document.
Natural
set file to mash.file(4, "books.xml")
set xml to mash.xml.read(file)
set books to xml.query("book")
printline "Number of books: {{ books.length() }}"
printline
each books as book
each book.childNodes as node
printline "{{ node.nodeName }} : {{ node.nodeValue }}"
end
printline
end
Standard
file = mash.file(4, "books.xml")
xml = mash.xml.read(file)
books = xml.query("book")
printline "Number of books: {{ books.length() }}"
printline
each (books as book) {
each (book.childNodes as node) {
printline "{{ node.nodeName }} : {{ node.nodeValue }}"
}
printline
}
Output
Number of books: 12
author : Gambardella, Matthew
title : XML Developer's Guide
genre : Computer
price : 44.95
publish_date : 2000-10-01
description : An in-depth look at creating applications
with XML.
author : Ralls, Kim
title : Midnight Rain
genre : Fantasy
price : 5.95
publish_date : 2000-12-16
description : A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.
author : Corets, Eva
title : Maeve Ascendant
genre : Fantasy
price : 5.95
publish_date : 2000-11-17
description : After the collapse of a nanotechnology
society in England, the young survivors lay the
foundation for a new society.
author : Corets, Eva
title : Oberon's Legacy
genre : Fantasy
price : 5.95
publish_date : 2001-03-10
description : In post-apocalypse England, the mysterious
agent known only as Oberon helps to create a new life
for the inhabitants of London. Sequel to Maeve
Ascendant.
author : Corets, Eva
title : The Sundered Grail
genre : Fantasy
price : 5.95
publish_date : 2001-09-10
description : The two daughters of Maeve, half-sisters,
battle one another for control of England. Sequel to
Oberon's Legacy.
author : Randall, Cynthia
title : Lover Birds
genre : Romance
price : 4.95
publish_date : 2000-09-02
description : When Carla meets Paul at an ornithology
conference, tempers fly as feathers get ruffled.
author : Thurman, Paula
title : Splish Splash
genre : Romance
price : 4.95
publish_date : 2000-11-02
description : A deep sea diver finds true love twenty
thousand leagues beneath the sea.
author : Knorr, Stefan
title : Creepy Crawlies
genre : Horror
price : 4.95
publish_date : 2000-12-06
description : An anthology of horror stories about roaches,
centipedes, scorpions and other insects.
author : Kress, Peter
title : Paradox Lost
genre : Science Fiction
price : 6.95
publish_date : 2000-11-02
description : After an inadvertant trip through a Heisenberg
Uncertainty Device, James Salway discovers the problems
of being quantum.
author : O'Brien, Tim
title : Microsoft .NET: The Programming Bible
genre : Computer
price : 36.95
publish_date : 2000-12-09
description : Microsoft's .NET initiative is explored in
detail in this deep programmer's reference.
author : O'Brien, Tim
title : MSXML3: A Comprehensive Guide
genre : Computer
price : 36.95
publish_date : 2000-12-01
description : The Microsoft MSXML3 parser is covered in
detail, with attention to XML DOM interfaces, XSLT processing,
SAX and more.
author : Galos, Mike
title : Visual Studio 7: A Comprehensive Guide
genre : Computer
price : 49.95
publish_date : 2001-04-16
description : Microsoft Visual Studio 7 is explored in depth,
looking at how Visual Basic, Visual C++, C#, and ASP+ are
integrated into a comprehensive development
environment.
Notes
The
readmethod opens the stream on the File object and holds it open. If you wish to perform actions such as delete on the File after callingreadplease ensure that you call the File’sclose()method first.