5 #include <libxml/xmlreader.h>
6 #include <libxml/xmlerror.h>
14 #include <boost/call_traits.hpp>
16 #include <zypp/base/LogControl.h>
17 #include <zypp/base/LogTools.h>
19 #include "zypp/base/Exception.h"
20 #include "zypp/base/InputStream.h"
21 #include "zypp/base/DefaultIntegral.h"
22 #include <zypp/base/Function.h>
23 #include <zypp/base/Iterator.h>
24 #include <zypp/Pathname.h>
25 #include <zypp/Edition.h>
26 #include <zypp/CheckSum.h>
27 #include <zypp/Date.h>
30 #include "zypp/parser/xml/Reader.h"
35 ///////////////////////////////////////////////////////////////////
37 static const Pathname sysRoot( "/Local/ROOT" );
39 ///////////////////////////////////////////////////////////////////
42 void ti( const _Cl & c )
44 SEC << __PRETTY_FUNCTION__ << endl;
47 ///////////////////////////////////////////////////////////////////
49 bool dump( xml::Reader & reader_r )
51 MIL << *reader_r << endl;
54 ///////////////////////////////////////////////////////////////////
56 bool dumpNode( xml::Reader & reader_r )
58 switch ( reader_r->nodeType() )
60 case XML_READER_TYPE_ELEMENT:
61 MIL << *reader_r << endl;
62 for ( int i = 0; i < reader_r->attributeCount(); ++i )
64 MIL << " attr no " << i << " '" << reader_r->getAttributeNo( i ) << "'" << endl;
68 case XML_READER_TYPE_ATTRIBUTE:
69 WAR << *reader_r << endl;
72 case XML_READER_TYPE_TEXT:
73 case XML_READER_TYPE_CDATA:
74 DBG << *reader_r << endl;
78 //ERR << *reader_r << endl;
84 ///////////////////////////////////////////////////////////////////
86 bool dumpEd( xml::Reader & reader_r )
89 if ( reader_r->nodeType() == XML_READER_TYPE_ELEMENT
90 && reader_r->name() == "version" )
92 MIL << *reader_r << endl;
93 DBG << reader_r->getAttribute( "rel" ) << endl;
94 ERR << *reader_r << endl;
95 DBG << reader_r->getAttribute( "ver" ) << endl;
96 ERR << *reader_r << endl;
97 DBG << reader_r->getAttribute( "epoch" ) << endl;
98 ERR << *reader_r << endl;
99 WAR << Edition( reader_r->getAttribute( "ver" ).asString(),
100 reader_r->getAttribute( "rel" ).asString(),
101 reader_r->getAttribute( "epoch" ).asString() ) << endl;
107 ///////////////////////////////////////////////////////////////////
109 template<class _OutputIterator>
112 DumpDeps( _OutputIterator result_r )
113 : _result( result_r )
116 bool operator()( xml::Reader & reader_r )
118 if ( reader_r->nodeType() == XML_READER_TYPE_ELEMENT
119 && reader_r->prefix() == "rpm"
120 && reader_r->localName() == "entry" )
122 string n( reader_r->getAttribute( "name" ).asString() );
123 Rel op( reader_r->getAttribute( "flags" ).asString() );
124 if ( op != Rel::ANY )
129 n += reader_r->getAttribute( "ver" ).asString();
131 n += reader_r->getAttribute( "rel" ).asString();
139 _OutputIterator _result;
142 template<class _OutputIterator>
143 DumpDeps<_OutputIterator> dumpDeps( _OutputIterator result_r )
144 { return DumpDeps<_OutputIterator>( result_r ); }
146 ///////////////////////////////////////////////////////////////////
148 /******************************************************************
150 ** FUNCTION NAME : main
151 ** FUNCTION TYPE : int
153 int main( int argc, char * argv[] )
155 INT << "===[START]==========================================" << endl;
167 repodata = "/Local/FACTORY/repodata";
168 repodata /= "primary.xml";
173 Measure m( "Parse" );
174 xml::Reader reader( repodata );
176 reader.foreachNode( dumpNode );
178 reader.foreachNodeOrAttribute( dumpNode );
181 INT << "===[END]============================================" << endl << endl;
186 <?xml version="1.0" encoding="UTF-8"?>
187 <metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="23230">
189 <name>fam-devel</name>
191 <version epoch="0" ver="2.6.10" rel="141"/>
192 <checksum type="sha" pkgid="YES">59d6a65cdadd911fe8ceee87740a54305b2ab053</checksum>
193 <summary>Include Files and Libraries Mandatory for Development</summary>
194 <description>Fam is a file alteration monitoring service. This means that you can
196 foreachNode( dumpNode )
197 =======================
199 0:ELEMENT <metadata> [attr 3]
200 attr no 0 'http://linux.duke.edu/metadata/common'
201 attr no 1 'http://linux.duke.edu/metadata/rpm'
203 1: ELEMENT <package> [attr 1]
205 2: ELEMENT <name> [noattr]
206 3: TEXT <#text> [noattr] {fam-devel}
207 2: ELEMENT <arch> [noattr]
208 3: TEXT <#text> [noattr] {ppc}
209 2: ELEMENT <version> [attr 3|empty]
213 2: ELEMENT <checksum> [attr 2]
216 3: TEXT <#text> [noattr] {59d6a65cdadd911fe8ceee87740a54305b2ab053}
217 2: ELEMENT <summary> [noattr]
218 3: TEXT <#text> [noattr] {Include Files and Libraries Mandatory for Development}
219 2: ELEMENT <description> [noattr]
220 3: TEXT <#text> [noattr] {Fam is a file alteration monitoring service. This means that you can
222 foreachNodeOrAttribute( dumpNode )
223 ==================================
225 0:ELEMENT <metadata> [attr 3]
226 attr no 0 'http://linux.duke.edu/metadata/common'
227 attr no 1 'http://linux.duke.edu/metadata/rpm'
229 1: ATTRIBUTE <xmlns> [noattr] {http://linux.duke.edu/metadata/common}
230 1: ATTRIBUTE <xmlns:rpm> [noattr] {http://linux.duke.edu/metadata/rpm}
231 1: ATTRIBUTE <packages> [noattr] {23230}
232 1: ELEMENT <package> [attr 1]
234 2: ATTRIBUTE <type> [noattr] {rpm}
235 2: ELEMENT <name> [noattr]
236 3: TEXT <#text> [noattr] {fam-devel}
237 2: ELEMENT <arch> [noattr]
238 3: TEXT <#text> [noattr] {ppc}
239 2: ELEMENT <version> [attr 3|empty]
243 3: ATTRIBUTE <epoch> [noattr] {0}
244 3: ATTRIBUTE <ver> [noattr] {2.6.10}
245 3: ATTRIBUTE <rel> [noattr] {141}
246 2: ELEMENT <checksum> [attr 2]
249 3: ATTRIBUTE <type> [noattr] {sha}
250 3: ATTRIBUTE <pkgid> [noattr] {YES}
251 3: TEXT <#text> [noattr] {59d6a65cdadd911fe8ceee87740a54305b2ab053}
252 3: ATTRIBUTE <type> [noattr] {sha}
253 3: ATTRIBUTE <pkgid> [noattr] {YES}
254 2: ELEMENT <summary> [noattr]
255 3: TEXT <#text> [noattr] {Include Files and Libraries Mandatory for Development}
256 2: ELEMENT <description> [noattr]
257 3: TEXT <#text> [noattr] {Fam is a file alteration monitoring service. This means that you can