YUMRepomdParser.cc

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
00005 |                          / /__ | | | | | |                           |
00006 |                         /_____||_| |_| |_|                           |
00007 |                                                                      |
00008 \---------------------------------------------------------------------*/
00013 #include <zypp/parser/yum/YUMRepomdParser.h>
00014 #include <zypp/parser/LibXMLHelper.h>
00015 #include <istream>
00016 #include <string>
00017 #include "zypp/parser/xml_parser_assert.h"
00018 #include <libxml/xmlreader.h>
00019 #include <libxml/tree.h>
00020 #include <zypp/base/Logger.h>
00021 #include <zypp/parser/yum/schemanames.h>
00022 
00023 using namespace std;
00024 namespace zypp
00025 {
00026 namespace parser
00027 {
00028 namespace yum
00029 {
00030 
00031 YUMRepomdParser::~YUMRepomdParser()
00032 { }
00033 
00034 YUMRepomdParser::YUMRepomdParser()
00035 { }
00036 
00037 YUMRepomdParser::YUMRepomdParser(YUMRepomdData_Ptr& entry)
00038     : XMLNodeIterator<YUMRepomdData_Ptr>(entry)
00039 { }
00040 
00041 
00042 // select for which elements process() will be called
00043 bool
00044 YUMRepomdParser::isInterested(const xmlNodePtr nodePtr)
00045 {
00046   return _helper.isElement(nodePtr) && _helper.name(nodePtr) == "data";
00047 }
00048 
00049 // do the actual processing
00050 YUMRepomdData_Ptr
00051 YUMRepomdParser::process(const xmlTextReaderPtr reader)
00052 {
00053   xml_assert(reader);
00054   YUMRepomdData_Ptr repoPtr = new YUMRepomdData;
00055   xmlNodePtr dataNode = xmlTextReaderExpand(reader);
00056   xml_assert(dataNode);
00057   repoPtr->type = _helper.attribute(dataNode,"type");
00058 
00059   for (xmlNodePtr child = dataNode->children;
00060        child && child != dataNode;
00061        child = child->next)
00062   {
00063     if (_helper.isElement(child))
00064     {
00065       string name = _helper.name(child);
00066       if (name == "location")
00067       {
00068         repoPtr->location = _helper.attribute(child,"href");
00069       }
00070       else if (name == "checksum")
00071       {
00072         repoPtr->checksumType = _helper.attribute(child,"type");
00073         repoPtr->checksum = _helper.content(child);
00074       }
00075       else if (name == "timestamp")
00076       {
00077         repoPtr->timestamp = _helper.content(child);
00078       }
00079       else if (name == "open-checksum")
00080       {
00081         repoPtr->openChecksumType = _helper.attribute(child, "type");
00082         repoPtr->openChecksum = _helper.content(child);
00083       }
00084       else
00085       {
00086         WAR << "YUM <data> contains the unknown element <" << name << "> "
00087         << _helper.positionInfo(child) << ", skipping" << endl;
00088       }
00089     }
00090   }
00091   return repoPtr;
00092 } /* end process */
00093 
00094 
00095 YUMRepomdParser::YUMRepomdParser(std::istream &is, const std::string &baseUrl, parser::ParserProgress::Ptr progress)
00096     : XMLNodeIterator<YUMRepomdData_Ptr>(is, baseUrl,REPOMDSCHEMA, progress)
00097 {
00098   fetchNext();
00099 }
00100 
00101 } // namespace yum
00102 } // namespace parser
00103 } // namespace zypp

Generated on Tue Nov 28 16:49:30 2006 for zypp by  doxygen 1.5.0