XMLStarlet

{{howto|date=May 2020}}

{{Infobox software

| name = XMLStarlet

| logo =

| logo alt =

| screenshot =

| caption =

| screenshot alt =

| collapsible =

| author = Dagobert Michelsen, Noam Postavsky, Mikhail Grushinskiy

| developer =

| released = {{Start date and age|2005|02|08|df=yes}}

| discontinued =

| latest release version = {{wikidata|property|preferred|references|edit|P348|P548=Q2804309}} | latest release date = {{Start date and age|{{wikidata|qualifier|preferred|single|P348|P548=Q2804309|P577}}|df=yes}}

| latest preview version =

| latest preview date =

| programming language = C

| operating system = Unix-like, Windows, CygWin, Mac OS

| platform =

| size =

| language =

| language count =

| language footnote =

| genre = XML parser

| license = MIT License

| alexa =

| website = {{URL|http://xmlstar.sourceforge.net/}}

| standard =

| AsOf =

}}

XMLStarlet is a set of command line utilities (toolkit) to query, transform, validate, and edit XML documents and files using a simple set of shell commands in a way similar to how it is done with UNIX grep, sed, awk, diff, patch, join, etc commands.

This set of command line utilities can be used by those who want to test XPath query or execute commands on the fly as well as deal with many XML documents or for automated XML processing with shell scripts.

Features

The toolkit's feature set includes the following options:

  • Check or validate XML files (simple well-formedness check, DTD, XSD, RelaxNG)
  • Calculate values of XPath expressions on XML files (such as running sums, etc)
  • Search XML files for matches to given XPath expressions
  • Apply XSLT stylesheets to XML documents (including EXSLT support, and passing parameters to stylesheets)
  • Query XML documents (ex. query for value of some elements of attributes, sorting, etc)
  • Modify or edit XML documents (ex. delete some elements)
  • Format or "beautify" XML documents (as changing indentation, etc)
  • Fetch XML documents using http:// or ftp:// URLs
  • Browse tree structure of XML documents (in similar way to 'ls' command for directories)
  • Include one XML document into another using XInclude
  • XML c14n canonicalization
  • Escape/unescape special XML characters in input text
  • Print directory as XML document
  • Convert XML into PYX format (based on ESIS - ISO 8879), and vice versa.

The XMLStarlet command line utility is written in C and uses libxml2 and libxslt. Implementation of extensive choice of options for XMLStarlet utility was only possible because of rich feature set of both libraries: libxml2 and libxslt. XMLStarlet is linked statically to both libxml2 and libxslt, so generally all you need to process XML documents is one executable file.

XMLStarlet is open source free software released under an MIT License which allows free use and distribution for both commercial and non-commercial projects.

Examples

Consider the following XML document 'xmlfile1.xml' example:

en.wikipedia.org

de.wikipedia.org

fr.wikipedia.org

pl.wikipedia.org

es.wikipedia.org

en.wiktionary.org

fr.wiktionary.org

vi.wiktionary.org

tr.wiktionary.org

es.wiktionary.org

en.wikiversity.org

On a command prompt the following five XPath queries are executed on the above XML file 'xmlfile1.xml'.

  • Example 1: The XPath expression to select all name attributes for all projects.

$ xmlstarlet sel -t -v "//wikimedia/projects/project/@name" xmlfile1.xml

Wikipedia

Wiktionary

Wikiversity

  • Example 2: The XPath expression to select all attributes of the last Wikimedia project.

$ xmlstarlet sel -t -v "/wikimedia/projects/project[last()]/@*" xmlfile1.xml

Wikiversity

2006-10-04

  • Example 3: The XPath expression to select addresses of all Wiktionary editions (text of all edition elements that exist under project element with a name attribute of Wiktionary).

$ xmlstarlet sel -t -v "/wikimedia/projects/project[@name='Wiktionary']/editions/edition" xmlfile1.xml

en.wiktionary.org

fr.wiktionary.org

vi.wiktionary.org

tr.wiktionary.org

es.wiktionary.org

  • Example4: The XPath expression to select addresses of all Wikimedia Wiktionary editions that have languages different from Turkish and Spanish (all those NOT Turkish and Not Spanish).

$ xmlstarlet sel -t -v "/wikimedia/projects/project[@name='Wiktionary']/editions/edition[@language!='Turkish' and @language!='Spanish']" xmlfile1.xml

en.wiktionary.org

fr.wiktionary.org

vi.wiktionary.org

  • Example 5: The XPath expression to select all attributes of editions whose position is greater or equal to 3 in the list of editions.

$ xmlstarlet sel -t -v "/wikimedia/projects/project/editions/edition[position() >= 3]/@*" xmlfile1.xml

French

Polish

Spanish

Vietnamese

Turkish

Spanish

An XML document can be validated against an XSD schema saved in file 'xsdfile.xsd' as follows:

$ xmlstarlet val -e -s xsdfile.xsd xmlfile1.xml

xmlfile1.xml - valid

See also

  • XML (Extensible Markup Language) is a markup language that defines a set of rules for encoding documents in a format that is both human-readable and machine-readable.
  • XPath (XML Path Language) is a query language for selecting nodes from an XML document.
  • XSLT (Extensible Stylesheet Language Transformations) is a language for transforming XML documents into other XML documents or other formats such as HTML for web pages, plain text, etc.
  • Document type definition (DTD) defines the legal building blocks of an XML document.

Notes

{{notelist}}