The QAbstractXmlReceiver class provides a callback interface for transforming the output of a QXmlQuery . 更多...
头: | #include <QAbstractXmlReceiver> |
qmake: | QT += xmlpatterns |
Since: | Qt 4.4 |
继承者: | QXmlSerializer |
注意: 此类的所有函数 可重入 .
QAbstractXmlReceiver () | |
virtual | ~QAbstractXmlReceiver () |
virtual void | atomicValue (const QVariant & value ) = 0 |
virtual void | 属性 (const QXmlName & name , const QStringRef & value ) = 0 |
virtual void | characters (const QStringRef & value ) = 0 |
virtual void | comment (const QString & value ) = 0 |
virtual void | endDocument () = 0 |
virtual void | endElement () = 0 |
virtual void | endOfSequence () = 0 |
virtual void | namespaceBinding (const QXmlName & name ) = 0 |
virtual void | processingInstruction (const QXmlName & target , const QString & value ) = 0 |
virtual void | startDocument () = 0 |
virtual void | startElement (const QXmlName & name ) = 0 |
virtual void | startOfSequence () = 0 |
The QAbstractXmlReceiver class provides a callback interface for transforming the output of a QXmlQuery .
QAbstractXmlReceiver is an abstract base class that provides a callback interface for receiving an XQuery sequence , usually the output of an QXmlQuery , and transforming that sequence into a structure of your choosing, usually XML. Consider the example:
QXmlQuery query; query.setQuery("doc('index.html')/html/body/p[1]"); QXmlSerializer serializer(query, myOutputDevice); query.evaluateTo(&serializer);
First it constructs a
query
that gets the first paragraph from document
index.html
. Then it constructs an
XML serializer
采用
query
and
myOutputDevice
(Note the
serializer
是
XML receiver
, ie a subclass of
QAbstractXmlReceiver
). Finally, it
evaluates
the
query
, producing an ordered sequence of calls to the
serializer's
callback functions. The sequence of callbacks transforms the query output to XML and writes it to
myOutputDevice
.
Although the example uses QXmlQuery to produce the sequence of callbacks to functions in QAbstractXmlReceiver , you can call the callback functions directly as long as your sequence of calls represents a valid XQuery sequence .
An XQuery sequence is an ordered collection of zero, one, or many 项 . Each item is either an atomic value 或 node . An atomic value is a simple data value.
There are six kinds of nodes .
The sequence of nodes and atomic values obeys the following rules. Note that Namespace Node refers to a special Attribute Node with name xmlns .
The sequence of nodes and atomic values is sent to an QAbstractXmlReceiver ( QXmlSerializer in the example above) as a sequence of calls to the receiver's callback functions. The mapping of callback functions to sequence items is as follows.
For a complete explanation of XQuery sequences, visit XQuery Data Model .
另请参阅 W3C XQuery 1.0 and XPath 2.0 Data Model (XDM) , QXmlSerializer ,和 QXmlResultItems .
Constructs an abstract xml receiver.
[虚拟]
QAbstractXmlReceiver::
~QAbstractXmlReceiver
()
Destroys the xml receiver.
[pure virtual]
void
QAbstractXmlReceiver::
atomicValue
(const
QVariant
&
value
)
This callback is called when an atomic value appears in the sequence 。 value is a simple data value . It is guaranteed to be valid .
[pure virtual]
void
QAbstractXmlReceiver::
属性
(const
QXmlName
&
name
, const
QStringRef
&
value
)
This callback is called when an attribute node appears in the sequence . name 是 attribute name 和 value string contains the attribute value.
[pure virtual]
void
QAbstractXmlReceiver::
characters
(const
QStringRef
&
value
)
This callback is called when a text node appears in the sequence 。 value contains the text. Adjacent text nodes may not occur in the sequence , i.e., this callback must not be called twice in a row.
[pure virtual]
void
QAbstractXmlReceiver::
comment
(const
QString
&
value
)
This callback is called when a comment node appears in the sequence 。 value is the comment text, which must not contain the string "--".
[pure virtual]
void
QAbstractXmlReceiver::
endDocument
()
This callback is called when the end of a document node appears in the sequence .
[pure virtual]
void
QAbstractXmlReceiver::
endElement
()
This callback is called when the end of an element node appears in the sequence .
[pure virtual]
void
QAbstractXmlReceiver::
endOfSequence
()
This callback is called once only, right after the sequence ends.
[pure virtual]
void
QAbstractXmlReceiver::
namespaceBinding
(const
QXmlName
&
name
)
This callback is called when a namespace binding is in scope of an element. A namespace is defined by a URI. In the QXmlName name , the value of QXmlName::namespaceUri () is that URI. The value of QXmlName::prefix () is the prefix that the URI is bound to. The local name is insignificant and can be an arbitrary value.
[pure virtual]
void
QAbstractXmlReceiver::
processingInstruction
(const
QXmlName
&
target
, const
QString
&
value
)
This callback is called when a processing instruction appears in the sequence . A processing instruction is used in an XML document to tell the application reading the document to perform some action. A typical example is to use a processing instruction to tell the application to use a particular XSLT stylesheet to process the document.
<?xml-stylesheet type="test/xsl" href="formatter.xsl"?>
target 是 name of the processing instruction. Its prefix and namespace URI must both be empty. Its local name is the target. In the above example, the name is xml-stylesheet .
The value specifies the action to be taken. Note that the value must not contain the string "?>". In the above example, the value is type="test/xsl" href="formatter.xsl .
Generally, use of processing instructions should be avoided, because they are not namespace aware and in many contexts are stripped out anyway. Processing instructions can often be replaced with elements from a custom namespace.
[pure virtual]
void
QAbstractXmlReceiver::
startDocument
()
This callback is called when a document node appears in the sequence .
[pure virtual]
void
QAbstractXmlReceiver::
startElement
(const
QXmlName
&
name
)
This callback is called when a new element node appears in the sequence . name is the valid name of the node element.
[pure virtual]
void
QAbstractXmlReceiver::
startOfSequence
()
This callback is called once only, right before the sequence begins.