QAbstractXmlReceiver Class

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 .

XQuery Sequences

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 .

  • An Element Node represents an XML element.
  • An Attribute Node represents an XML attribute.
  • A Document Node represents an entire XML document.
  • A Text Node represents character data (element content).
  • A Processing Instruction Node represents an XML processing instruction, which 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 display the document.
  • And a Comment node represents an XML comment.

The sequence of nodes and atomic values obeys the following rules. Note that Namespace Node refers to a special Attribute Node with name xmlns .

  • 每个 node appears in the sequence before its children and their descendants appear.
  • A node 's descendants appear in the sequence before any of its siblings appear.
  • A Document Node represents an entire document. Zero or more Document Nodes can appear in a sequence , but they can only be top level items (i.e., a Document Node can't be a child of another node .
  • Namespace Nodes immediately follow the Element Node with which they are associated.
  • Attribute Nodes immediately follow the Namespace Nodes of the element with which they are associated, or...
  • If there are no Namespace Nodes following an element, then the Attribute Nodes immediately follow the element.
  • An atomic value can only appear as a top level item , i.e., it can't appear as a child of a node .
  • Processing Instruction Nodes do not have children, and their parent is either a Document Node Element Node .
  • Comment Nodes do not have children, and their parent is either a Document Node Element Node .

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 .

成员函数文档编制

QAbstractXmlReceiver:: QAbstractXmlReceiver ()

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.