libzypp 17.31.1
Reader.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#ifndef ZYPP_PARSER_XML_READER_H
13#define ZYPP_PARSER_XML_READER_H
14
15#include <iosfwd>
16
17#include <zypp/base/NonCopyable.h>
18#include <zypp-core/base/InputStream>
19#include <zypp/base/Function.h>
20
22
24namespace zypp
25{
27 namespace xml
28 {
29
31 //
32 // CLASS NAME : Validate
33 //
37 struct Validate
38 {
39 static Validate none()
40 { return Validate(); }
41 };
43
45 //
46 // CLASS NAME : Reader
47 //
96 {
97 public:
99 Reader( const InputStream & stream_r,
100 const Validate & validate_r = Validate::none() );
101
103 ~Reader();
104
105 public:
106
116
118 bool nextNode();
119
121 bool nextNodeAttribute();
122
125 { return( nextNodeAttribute() || nextNode() ); }
126
128 bool atEnd() const
129 { return( _node.readState() == XML_TEXTREADER_MODE_CLOSED ); }
130
132 const Node & operator*() const
133 { return _node; }
134
136 const Node * operator->() const
137 { return &_node; }
138
139 public:
141 typedef function<bool( Reader & )> ProcessNode;
142
145 {
146 if ( _node.isAttribute() )
147 nextNode();
148 for ( ; ! atEnd(); nextNode() )
149 {
150 if ( ! fnc_r( *this ) )
151 return false;
152 }
153 return true;
154 }
155
158 {
159 if ( _node.isAttribute() && ! fnc_r( *this ) )
160 return false;
161 while( nextNodeAttribute() )
162 {
163 if ( ! fnc_r( *this ) )
164 return false;
165 }
166 return true;
167 }
168
171 {
172 for ( ; ! atEnd(); nextNodeOrAttribute() )
173 {
174 if ( ! fnc_r( *this ) )
175 return false;
176 }
177 return true;
178 }
179
180 public:
182 bool seekToNode( int depth_r, const std::string & name_r );
183
185 bool seekToEndNode( int depth_r, const std::string & name_r );
186
187 private:
188 void close();
189
190 private:
192 xmlTextReaderPtr _reader;
194 };
196
198 } // namespace xml
201} // namespace zypp
203#endif // ZYPP_PARSER_XML_READER_H
Helper to create and pass std::istream.
Definition: inputstream.h:57
xmlTextReader based interface to Reader's current node.
Definition: Node.h:36
bool isAttribute() const
Whether this is an Attribute node.
Definition: Node.h:92
ReadState readState() const
Gets the read state of the reader.
Definition: Node.h:139
xmlTextReader based interface to iterate xml streams.
Definition: Reader.h:96
bool foreachNodeAttribute(ProcessNode fnc_r)
Definition: Reader.h:157
bool seekToEndNode(int depth_r, const std::string &name_r)
Definition: Reader.cc:232
XmlString nodeText()
If the current node is not empty, advances the reader to the next node, and returns the value.
Definition: Reader.cc:140
bool nextNodeAttribute()
Definition: Reader.cc:180
const Node * operator->() const
Definition: Reader.h:136
InputStream _stream
Definition: Reader.h:191
xmlTextReaderPtr _reader
Definition: Reader.h:192
~Reader()
Dtor.
Definition: Reader.cc:131
Reader(const InputStream &stream_r, const Validate &validate_r=Validate::none())
Ctor.
Definition: Reader.cc:106
bool foreachNodeOrAttribute(ProcessNode fnc_r)
Definition: Reader.h:170
bool seekToNode(int depth_r, const std::string &name_r)
Definition: Reader.cc:212
bool nextNode()
Definition: Reader.cc:160
bool atEnd() const
Definition: Reader.h:128
function< bool(Reader &)> ProcessNode
Definition: Reader.h:141
const Node & operator*() const
Definition: Reader.h:132
bool foreachNode(ProcessNode fnc_r)
Definition: Reader.h:144
bool nextNodeOrAttribute()
Definition: Reader.h:124
xmlChar * wrapper.
Definition: XmlString.h:41
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
Definition: NonCopyable.h:26
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
xmlTextReader document validation.
Definition: Reader.h:38
static Validate none()
Definition: Reader.h:39