XML parsing

To read xml document with terminal we can use xmllint tool.

Lets say we have a file named 1.xml with the below content:

<?xml version="1.0" encoding="utf-8"?>  
<item>  
  <definition test="abc">v. to provide a place to sleep or live</definition>  
  <definition>def2</definition>  
  <word>accommodates</word>  
</item>

Get elements:

xmllint --xpath "/item/definition" 1.xml

Output: <definition test="abc">v. to provide a place to sleep or live</definition><definition>def2</definition>

Get text of elements:

xmllint --xpath "//item/word/text()" 1.xml

Output: accommodates

Get attributes:

xmllint --xpath "/item/definition/@test" 1.xml

Output:  test="abc"

Select elements by its attribute:

xmllint --xpath "/item/definition[@test='abc']" 1.xml

Output: <definition test="abc">v. to provide a place to sleep or live</definition>


Search element by part of text:

xmllint --xpath "//*[contains(*,'sleep')]" 1.xml

Search element by part of attribute:

xmllint --xpath "//*[contains(@test,'bc')]" 1.xml

Parse HTML URL:

xmllint --html --xpath //div/a  "http://blog.mbirgin.com"

Parse HTML and ignore error messages:

curl -s http://www.mbirgin.com | xmllint --html  --xpath '(//td[contains(@class,"lastpost") and contains(@class,"windowbg2")])[1]/text()'  2>/dev/null -