Imported Upstream version 14.45.0
[platform/upstream/libzypp.git] / devel / devel.ma / Xml.cc
1 #include <iostream>
2 #include <list>
3 #include <map>
4 #include <set>
5
6 #include <zypp/base/LogTools.h>
7 #include <zypp/base/LogControl.h>
8 #include <zypp/base/Exception.h>
9
10 #include <zypp/parser/xml/Reader.h>
11 //#include <zypp/parser/xml/ParseDef.h>
12 //#include <zypp/parser/xml/ParseDefConsume.h>
13
14 using namespace std;
15 using namespace zypp;
16
17 #include <zypp/base/Measure.h>
18 using zypp::debug::Measure;
19
20 ///////////////////////////////////////////////////////////////////
21
22 /** Helper to detect an objects type. */
23 template<class _Cl> void ti( const _Cl & c )
24 {
25   SEC << __PRETTY_FUNCTION__ << endl;
26 }
27
28 bool noop( xml::Reader & reader_r )
29 {
30   return true;
31 }
32 struct Noop
33 {
34   bool operator()( xml::Reader & reader_r ) const
35   { return true; }
36 };
37
38 ///////////////////////////////////////////////////////////////////
39
40 bool dumpNode( xml::Reader & reader_r )
41 {
42   switch ( reader_r->nodeType() )
43   {
44     case XML_READER_TYPE_ELEMENT:
45       MIL << *reader_r << endl;
46       for ( int i = 0; i < reader_r->attributeCount(); ++i )
47       {
48         MIL << " attr no " << i << " '" << reader_r->getAttributeNo( i ) << "'" << endl;
49       }
50       break;
51
52     case XML_READER_TYPE_ATTRIBUTE:
53       WAR << *reader_r << endl;
54       break;
55
56     case XML_READER_TYPE_TEXT:
57     case XML_READER_TYPE_CDATA:
58       DBG << *reader_r << endl;
59       break;
60
61     default:
62       //ERR << *reader_r << endl;
63       break;
64   }
65   return true;
66 }
67
68 ///////////////////////////////////////////////////////////////////
69
70 bool consume( xml::Reader & reader_r )
71 {
72   switch ( reader_r->nodeType() )
73   {
74     case XML_READER_TYPE_ELEMENT:
75       MIL << *reader_r << endl;
76       for ( int i = 0; i < reader_r->attributeCount(); ++i )
77       {
78         MIL << " attr no " << i << " '" << reader_r->getAttributeNo( i ) << "'" << endl;
79       }
80       break;
81
82     case XML_READER_TYPE_ATTRIBUTE:
83       WAR << *reader_r << endl;
84       break;
85
86     case XML_READER_TYPE_TEXT:
87     case XML_READER_TYPE_CDATA:
88       DBG << *reader_r << endl;
89       break;
90
91     default:
92       //ERR << *reader_r << endl;
93       break;
94   }
95   return true;
96 }
97
98 /******************************************************************
99 **
100 **      FUNCTION NAME : main
101 **      FUNCTION TYPE : int
102 */
103 int main( int argc, char * argv[] )
104 {
105   --argc, ++argv;
106   INT << "===[START]==========================================" << endl;
107
108   bool verbose( true );
109   Pathname input( "test.xml" );
110   xml::Reader::ProcessNode consumer( consume );
111
112   if ( argc && !strcmp( *argv, "-q" ) )
113   {
114     --argc, ++argv;
115     verbose = false;
116   }
117
118   {
119     Measure m( "Parse all" );
120     for ( ; argc; --argc, ++argv )
121     {
122       input = *argv;
123
124       try {
125         Measure m( input.basename() );
126 //      zypp::base::LogControl::TmpLineWriter shutUp;
127         xml::Reader reader( input );
128         if ( verbose )
129           reader.foreachNodeOrAttribute( consumer );
130         else
131           reader.foreachNode( consumer );
132       }
133       catch ( const Exception & exp )
134       {
135         INT << exp << endl << exp.historyAsString();
136       }
137     }
138   }
139   INT << "===[END]============================================" << endl << endl;
140   return 0;
141 }
142
143 /*
144 <?xml version="1.0" encoding="UTF-8"?>
145 <metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="23230">
146 <package type="rpm">
147 <name>fam-devel</name>
148 <arch>ppc</arch>
149 <version epoch="0" ver="2.6.10" rel="141"/>
150 <checksum type="sha" pkgid="YES">59d6a65cdadd911fe8ceee87740a54305b2ab053</checksum>
151 <summary>Include Files and Libraries Mandatory for Development</summary>
152 <description>Fam is a file alteration monitoring service. This means that you can
153
154 foreachNode( dumpNode )
155 =======================
156 START MEASURE(Parse)
157 0:ELEMENT <metadata>  [attr 3]
158  attr no 0 'http://linux.duke.edu/metadata/common'
159  attr no 1 'http://linux.duke.edu/metadata/rpm'
160  attr no 2 '23230'
161 1: ELEMENT <package>  [attr 1]
162  attr no 0 'rpm'
163 2:  ELEMENT <name>  [noattr]
164 3:   TEXT <#text>  [noattr] {fam-devel}
165 2:  ELEMENT <arch>  [noattr]
166 3:   TEXT <#text>  [noattr] {ppc}
167 2:  ELEMENT <version>  [attr 3|empty]
168  attr no 0 '0'
169  attr no 1 '2.6.10'
170  attr no 2 '141'
171 2:  ELEMENT <checksum>  [attr 2]
172  attr no 0 'sha'
173  attr no 1 'YES'
174 3:   TEXT <#text>  [noattr] {59d6a65cdadd911fe8ceee87740a54305b2ab053}
175 2:  ELEMENT <summary>  [noattr]
176 3:   TEXT <#text>  [noattr] {Include Files and Libraries Mandatory for Development}
177 2:  ELEMENT <description>  [noattr]
178 3:   TEXT <#text>  [noattr] {Fam is a file alteration monitoring service. This means that you can
179
180 foreachNodeOrAttribute( dumpNode )
181 ==================================
182 START MEASURE(Parse)
183 0:ELEMENT <metadata>  [attr 3]
184  attr no 0 'http://linux.duke.edu/metadata/common'
185  attr no 1 'http://linux.duke.edu/metadata/rpm'
186  attr no 2 '23230'
187 1: ATTRIBUTE <xmlns>  [noattr] {http://linux.duke.edu/metadata/common}
188 1: ATTRIBUTE <xmlns:rpm>  [noattr] {http://linux.duke.edu/metadata/rpm}
189 1: ATTRIBUTE <packages>  [noattr] {23230}
190 1: ELEMENT <package>  [attr 1]
191  attr no 0 'rpm'
192 2:  ATTRIBUTE <type>  [noattr] {rpm}
193 2:  ELEMENT <name>  [noattr]
194 3:   TEXT <#text>  [noattr] {fam-devel}
195 2:  ELEMENT <arch>  [noattr]
196 3:   TEXT <#text>  [noattr] {ppc}
197 2:  ELEMENT <version>  [attr 3|empty]
198  attr no 0 '0'
199  attr no 1 '2.6.10'
200  attr no 2 '141'
201 3:   ATTRIBUTE <epoch>  [noattr] {0}
202 3:   ATTRIBUTE <ver>  [noattr] {2.6.10}
203 3:   ATTRIBUTE <rel>  [noattr] {141}
204 2:  ELEMENT <checksum>  [attr 2]
205  attr no 0 'sha'
206  attr no 1 'YES'
207 3:   ATTRIBUTE <type>  [noattr] {sha}
208 3:   ATTRIBUTE <pkgid>  [noattr] {YES}
209 3:   TEXT <#text>  [noattr] {59d6a65cdadd911fe8ceee87740a54305b2ab053}
210 3:   ATTRIBUTE <type>  [noattr] {sha}
211 3:   ATTRIBUTE <pkgid>  [noattr] {YES}
212 2:  ELEMENT <summary>  [noattr]
213 3:   TEXT <#text>  [noattr] {Include Files and Libraries Mandatory for Development}
214 2:  ELEMENT <description>  [noattr]
215 3:   TEXT <#text>  [noattr] {Fam is a file alteration monitoring service. This means that you can
216
217 */