12 #include <libxml/xmlreader.h> 13 #include <libxml/xmlerror.h> 17 #include <zypp/base/LogControl.h> 18 #include <zypp/base/LogTools.h> 19 #include <zypp/base/Exception.h> 20 #include <zypp/base/String.h> 37 int ioread(
void * context_r,
char * buffer_r,
int bufferLen_r )
39 if ( context_r && buffer_r )
41 return reinterpret_cast<InputStream *
>(context_r)
42 ->stream().read( buffer_r, bufferLen_r ).gcount();
44 INT <<
"XML parser error: null pointer check failed " << context_r <<
' ' << (
void *)buffer_r << endl;
52 std::list<std::string> structuredErrors;
53 #if LIBXML_VERSION >= 21200 54 void structuredErrorFunc(
void * userData,
const xmlError * error )
56 void structuredErrorFunc(
void * userData, xmlError * error )
64 structuredErrors.push_back( err );
69 struct ParseException :
public Exception
72 : Exception(
"Parse error: " + ( structuredErrors.empty() ?
std::string(
"unknown error"): structuredErrors.back() ) )
74 for_( it, structuredErrors.begin(), --structuredErrors.end() )
91 , _reader( xmlReaderForIO( ioread, ioclose, &_stream,
92 stream_r.path().
asString().c_str(),
"utf-8", XML_PARSE_PEDANTIC ) )
100 structuredErrors.clear();
101 xmlTextReaderSetStructuredErrorHandler(
_reader, structuredErrorFunc, NULL );
144 int ret = xmlTextReaderRead(
_reader );
164 int ret = xmlTextReaderMoveToNextAttribute(
_reader );
std::string asString(const Patch::Category &obj)
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Reader(const InputStream &stream_r, const Validate &validate_r=Validate::none())
Ctor.
NodeType nodeType() const
Get the node type of the current node.
XmlString value() const
Provides the text value of the node if present.
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
std::string stripSuffix(const C_Str &str_r, const C_Str &suffix_r)
Strip a suffix_r from str_r and return the resulting string.
std::string basename() const
Return the last component of this path.
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
bool seekToNode(int depth_r, const std::string &name_r)
bool seekToEndNode(int depth_r, const std::string &name_r)
int depth() const
The depth of the node in the tree.
xmlTextReader document validation.
Base class for Exception.
XmlString nodeText()
If the current node is not empty, advances the reader to the next node, and returns the value...
XmlString name() const
The qualified name of the node, equal to Prefix :LocalName.
int isEmptyElement() const
Check if the current node is empty.
Easy-to use interface to the ZYPP dependency resolver.