extracting XML file using sed

Hello folks

I want to extract data between certain tag in XML file using 'sed'
<xml>
.........
..........
<one>XXXXXXXXXXXXXXXXXXXX</one>
......

Anyone ?Thank you

typeset -i mCnt
mFlag='N'
while read mLine
do
  mCnt=`echo $mLine | egrep -c '<one>'`
  if [ $mCnt -ne 0 ]; then
    mFlag='Y'
  fi
  if [ "$mFlag" = "Y" ]; then
    mOutLine=`echo $mLine | sed 's:<one>::;s:</one>::'`
    if [ "$mOutLine" != "" ]; then
      echo $mOutLine
    fi
  fi
  mCnt=`echo $mLine | egrep -c '</one>'`
  if [ $mCnt -ne 0 ]; then
    mFlag='N'
  fi
done < input_file

Could you please post more appropriate input and output ? :slight_smile:

<MiniTable id="BrowserMiniTable">
<Row>
<Value>66.17%</Value><Key>InternetExplorer</Key>
</Row>
<Row>
<Value>27.39%</Value><Key>Firefox</Key>
</Row>
</MiniTable>

	&lt;MiniTable id="ConnectionTable"&gt;
		&lt;Row&gt;
			&lt;Value&gt;4.56&lt;/Value&gt;&lt;Key&gt;InternetExplorer&lt;/Key&gt;
		&lt;/Row&gt;
		&lt;Row&gt;
			&lt;Value&gt;4.23&lt;/Value&gt;&lt;Key&gt;Firefox&lt;/Key&gt;
		&lt;/Row&gt;
	&lt;/MiniTable&gt;

------------------------------------------------------------------
There are many <MiniTable> but I wanted only first one i.e. <MiniTable id="BrowserMiniTable"> 's content only in following form---

OUTPUT:
Browser----%
InternetExplorer----66.17
Firefox----27.39

Thanks dude

Pujansrt,
Now you learned how important it is to follow the rules:

The solution that I gave works with your first requirement.

sed -n "/BrowserMiniTable/,/MiniTable/s/<Value>\([^%]*\)%*<\/Value><Key>\(.*\)<\/Key>/\2-----\1/p" filename

Thank you anbu23 your code is absolutely working.
This works when XML is organized. But when XML is not organize then I can not get result. for example:

<MiniTable id="BrowserMiniTable"><Row><Value>66.17%</Value><Key>InternetExplorer</Key>
</Row><Row><Value>27.39%</Value><Key>Firefox</Key>
</Row></MiniTable>

<MiniTable id="ConnectionTable"><Row><Value>4.56</Value><Key>InternetExplorer</Key></Row><Row><Value>4.23</Value><Key>Firefox</Key></Row></MiniTable>
--------------------

tr -d '\n' < browser.xml |
awk '
   BEGIN { RS="<" };
   /BrowserMiniTable/,/\/MiniTable/ {
      field1 = tolower($1);
      if (field1 ~ /^value>/) {
         value = substr($1, 7)
         sub(/%.*/, "", value)
      }
      else if (field1 ~ /^key>/)
         browser = substr($1, 5)
      else if (field1 ~/^\/row/) {
         print browser, value;
         browser = value = "";
      }
      else if (field1 ~ /^\/minitable/)
         exit;
   }
'

Output for your input sample :

InternetExplorer 66.17
Firefox 27.39