1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
11 #include "zypp/base/String.h"
12 #include "zypp/base/Logger.h"
13 #include "zypp/parser/yum/RepomdFileReader.h"
17 using namespace zypp::xml;
18 using zypp::source::yum::YUMResourceType;
20 namespace zypp { namespace parser { namespace yum {
22 RepomdFileReader::RepomdFileReader( const Pathname &repomd_file, ProcessResource callback )
23 : _tag(tag_NONE), _type(YUMResourceType::NONE_e), _callback(callback)
25 Reader reader( repomd_file );
26 MIL << "Reading " << repomd_file << endl;
27 reader.foreachNode( bind( &RepomdFileReader::consumeNode, this, _1 ) );
30 bool RepomdFileReader::consumeNode( Reader & reader_r )
32 //MIL << reader_r->name() << endl;
33 std::string data_type;
34 if ( reader_r->nodeType() == XML_READER_TYPE_ELEMENT )
36 if ( reader_r->name() == "repomd" )
41 if ( reader_r->name() == "data" )
44 _type = YUMResourceType(reader_r->getAttribute("type").asString());
47 if ( reader_r->name() == "location" )
50 _location.filename( reader_r->getAttribute("href").asString() );
53 if ( reader_r->name() == "checksum" )
56 string checksum_type = reader_r->getAttribute("type").asString() ;
57 string checksum_vaue = reader_r.nodeText().asString();
58 _location.checksum( CheckSum( checksum_type, checksum_vaue ) );
61 if ( reader_r->name() == "timestamp" )
67 else if ( reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT )
69 //MIL << "end element" << endl;
70 if ( reader_r->name() == "data" )
71 _callback( _location, _type );
77 } } } //ns zypp::source::yum