# xmlstarlet

> A command-line XML/XSLT toolkit.
> Note: You will likely need to know XPath: <https://developer.mozilla.org/en-US/docs/Web/XPath>.
> More information: <https://xmlstar.sourceforge.net/docs.php>.

- Format an XML document and print to `stdout`:

`xmlstarlet format {{path/to/file.xml}}`

- XML document can also be piped from `stdin`:

`{{cat path/to/file.xml}} | xmlstarlet format`

- Print all nodes that match a given XPath:

`xmlstarlet select --template --copy-of {{xpath}} {{path/to/file.xml}}`

- Insert an attribute to all matching nodes, and print to `stdout` (source file is unchanged):

`xmlstarlet edit --insert {{xpath}} --type attr --name {{attribute_name}} --value {{attribute_value}} {{path/to/file.xml}}`

- Update the value of all matching nodes in place (source file is changed):

`xmlstarlet edit --inplace --update {{xpath}} --value {{new_value}} {{file.xml}}`

- Delete all matching nodes in place (source file is changed):

`xmlstarlet edit --inplace --delete {{xpath}} {{file.xml}}`

- Escape or unescape special XML characters in a given string:

`xmlstarlet [un]escape {{string}}`

- List a given directory as XML (omit argument to list current directory):

`xmlstarlet ls {{path/to/directory}}`