6 #include <zypp/base/LogTools.h>
7 #include <zypp/base/LogControl.h>
8 #include <zypp/base/Exception.h>
10 #include <zypp/parser/xml/Reader.h>
11 //#include <zypp/parser/xml/ParseDef.h>
12 //#include <zypp/parser/xml/ParseDefConsume.h>
17 #include <zypp/base/Measure.h>
18 using zypp::debug::Measure;
20 ///////////////////////////////////////////////////////////////////
22 /** Helper to detect an objects type. */
23 template<class TCl> void ti( const TCl & c )
25 SEC << __PRETTY_FUNCTION__ << endl;
28 bool noop( xml::Reader & reader_r )
34 bool operator()( xml::Reader & reader_r ) const
38 ///////////////////////////////////////////////////////////////////
40 bool dumpNode( xml::Reader & reader_r )
42 switch ( reader_r->nodeType() )
44 case XML_READER_TYPE_ELEMENT:
45 MIL << *reader_r << endl;
46 for ( int i = 0; i < reader_r->attributeCount(); ++i )
48 MIL << " attr no " << i << " '" << reader_r->getAttributeNo( i ) << "'" << endl;
52 case XML_READER_TYPE_ATTRIBUTE:
53 WAR << *reader_r << endl;
56 case XML_READER_TYPE_TEXT:
57 case XML_READER_TYPE_CDATA:
58 DBG << *reader_r << endl;
62 //ERR << *reader_r << endl;
68 ///////////////////////////////////////////////////////////////////
70 bool consume( xml::Reader & reader_r )
72 switch ( reader_r->nodeType() )
74 case XML_READER_TYPE_ELEMENT:
75 MIL << *reader_r << endl;
76 for ( int i = 0; i < reader_r->attributeCount(); ++i )
78 MIL << " attr no " << i << " '" << reader_r->getAttributeNo( i ) << "'" << endl;
82 case XML_READER_TYPE_ATTRIBUTE:
83 WAR << *reader_r << endl;
86 case XML_READER_TYPE_TEXT:
87 case XML_READER_TYPE_CDATA:
88 DBG << *reader_r << endl;
92 //ERR << *reader_r << endl;
98 /******************************************************************
100 ** FUNCTION NAME : main
101 ** FUNCTION TYPE : int
103 int main( int argc, char * argv[] )
106 INT << "===[START]==========================================" << endl;
108 bool verbose( true );
109 Pathname input( "test.xml" );
110 xml::Reader::ProcessNode consumer( consume );
112 if ( argc && !strcmp( *argv, "-q" ) )
119 Measure m( "Parse all" );
120 for ( ; argc; --argc, ++argv )
125 Measure m( input.basename() );
126 // zypp::base::LogControl::TmpLineWriter shutUp;
127 xml::Reader reader( input );
129 reader.foreachNodeOrAttribute( consumer );
131 reader.foreachNode( consumer );
133 catch ( const Exception & exp )
135 INT << exp << endl << exp.historyAsString();
139 INT << "===[END]============================================" << endl << endl;
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">
147 <name>fam-devel</name>
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
154 foreachNode( dumpNode )
155 =======================
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'
161 1: ELEMENT <package> [attr 1]
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]
171 2: ELEMENT <checksum> [attr 2]
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
180 foreachNodeOrAttribute( dumpNode )
181 ==================================
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'
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]
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]
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]
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