12 #include <libxml/xmlreader.h> 13 #include <libxml/xmlerror.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 void structuredErrorFunc(
void * userData, xmlErrorPtr
error )
58 std::string err(
str::form(
"%s[%d] %s", Pathname::basename(error->file).c_str(), error->line,
60 structuredErrors.push_back( err );
66 #define X(m) SEC << " " << #m << "\t" << error->m << endl 67 #define XS(m) SEC << " " << #m << "\t" << (error->m?error->m:"NA") << endl 87 struct ParseException :
public Exception
90 : Exception(
"Parse error: " + ( structuredErrors.empty() ?
std::string(
"unknown error"): structuredErrors.back() ) )
92 for_( it, structuredErrors.begin(), --structuredErrors.end() )
108 : _stream( stream_r )
109 , _reader( xmlReaderForIO( ioread, ioclose, &_stream,
110 stream_r.path().
asString().c_str(),
"utf-8", XML_PARSE_PEDANTIC ) )
118 structuredErrors.clear();
119 xmlTextReaderSetStructuredErrorHandler(
_reader, structuredErrorFunc, NULL );
162 int ret = xmlTextReaderRead(
_reader );
182 int ret = xmlTextReaderMoveToNextAttribute(
_reader );
std::ostream & node(std::ostream &out_r, const std::string &name_r, Node::Attr attr_r)
std::string asString(const DefaultIntegral< Tp, TInitial > &obj)
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Reader(const InputStream &stream_r, const Validate &validate_r=Validate::none())
Ctor.
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.
int isEmptyElement() const
Check if the current node is empty.
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
int depth() const
The depth of the node in the tree.
bool seekToNode(int depth_r, const std::string &name_r)
XmlString value() const
Provides the text value of the node if present.
XmlString name() const
The qualified name of the node, equal to Prefix :LocalName.
bool seekToEndNode(int depth_r, const std::string &name_r)
xmlTextReader document validation.
Base class for Exception.
XmlString nodeText()
If the curent node is not empty, advances the reader to the next node, and returns the value...
Easy-to use interface to the ZYPP dependency resolver.
NodeType nodeType() const
Get the node type of the current node.