Public Member Functions | Private Attributes | Static Private Attributes

XMLStorage::XMLDocReader Class Reference

XMLDocReader is the XML file reader of XMLStorage. More...

Collaboration diagram for XMLStorage::XMLDocReader:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 XMLDocReader (XMLNode node)
void read (TextReader reader, XmlReaderSettings xmlSettings=null)
 read XML stream into XML tree below _pos
void startElement (string qName, XmlReader reader)
void endElement (string qName)
void characters (string text)
void startCDATA ()
void endCDATA ()
void processingInstruction (string target, string data)
string getInstructions ()

Private Attributes

XMLPos _pos
XmlReader _parser
string _content = ""
StringBuilder _instructions = new StringBuilder()
int _lastTag
bool _inCDATASection = false
bool _isContentCDATA = false

Static Private Attributes

static int TAG_NONE = 0
static int TAG_START = 1
static int TAG_END = 2

Detailed Description

XMLDocReader is the XML file reader of XMLStorage.

Definition at line 49 of file XMLDocReader.cs.


Constructor & Destructor Documentation

XMLStorage::XMLDocReader::XMLDocReader ( XMLNode  node ) [inline]

Definition at line 51 of file XMLDocReader.cs.

References _lastTag, _pos, and TAG_NONE.

    {
        _pos = new XMLPos(node);
        _lastTag = TAG_NONE;
    }

Member Function Documentation

void XMLStorage::XMLDocReader::characters ( string  text ) [inline]

Definition at line 201 of file XMLDocReader.cs.

References _content, _inCDATASection, _isContentCDATA, and XMLStorage::XMLHelper::encodeXMLString().

Referenced by read().

    {
         // encode _content compatible to XMLNode.setContent()
        _content += XMLHelper.encodeXMLString(text);

        if (_inCDATASection)
            _isContentCDATA = true;
    }

Here is the call graph for this function:

void XMLStorage::XMLDocReader::endCDATA (  ) [inline]

Definition at line 221 of file XMLDocReader.cs.

References _inCDATASection.

    {
        _inCDATASection = false;
    }
void XMLStorage::XMLDocReader::endElement ( string  qName ) [inline]

Definition at line 166 of file XMLDocReader.cs.

References _content, XMLStorage::XMLNode::_endLeading, _isContentCDATA, _lastTag, _pos, XMLStorage::XMLPos::back(), XMLStorage::XMLPos::cur(), XMLStorage::XMLNode::getChildren(), TAG_END, and TAG_START.

Referenced by read().

    {
        int i;

        if (_isContentCDATA)
            i = _content.Length;
        else {
             // search for content end leaving only whitespaces for leading
            i = _content.Length;
            for (; i>0; i--) {
                char ch = _content[i-1];
                if (!char.IsWhiteSpace(ch))
                    break;
            }
        }

        if (i > 0)
            if (_pos.cur().getChildren().Count == 0) // no children in current node?
                _pos.cur()._content += _content.Substring(0, i);
            else
                if (_lastTag == TAG_START)
                    _pos.cur()._content += _content.Substring(0, i);
                else
                    _pos.cur().getChildren().Last.Value._trailing += _content.Substring(0, i);

        if (i < _content.Length)
            _pos.cur()._endLeading = _content.Substring(i);

        _pos.back();

        _lastTag = TAG_END;
        _content = "";
        _isContentCDATA = false;
    }

Here is the call graph for this function:

string XMLStorage::XMLDocReader::getInstructions (  ) [inline]

Definition at line 232 of file XMLDocReader.cs.

References _instructions.

Referenced by XMLStorage::XMLDoc::read().

    {
        return _instructions.ToString();
    }
void XMLStorage::XMLDocReader::processingInstruction ( string  target,
string  data 
) [inline]

Definition at line 227 of file XMLDocReader.cs.

References _instructions.

Referenced by read().

    {
        _instructions.Append("<?").Append(target).Append(" ").Append(data).Append("?>");
    }
void XMLStorage::XMLDocReader::read ( TextReader  reader,
XmlReaderSettings  xmlSettings = null 
) [inline]

read XML stream into XML tree below _pos

Definition at line 58 of file XMLDocReader.cs.

References _content, _isContentCDATA, _parser, _pos, XMLStorage::XMLNode::_trailing, characters(), XMLStorage::XMLPos::cur(), endElement(), XMLStorage::XMLNode::getChildren(), processingInstruction(), and startElement().

Referenced by XMLStorage::XMLDoc::read().

    {
         // read XML data
        _parser = XmlReader.Create(reader, xmlSettings);

        XMLNode.Children children = _pos.cur().getChildren();

        while(_parser.Read())
        {
            switch(_parser.NodeType)
            {
                case XmlNodeType.Element:
                {
                    bool emptyElement = _parser.IsEmptyElement;
                    startElement(_parser.Name, _parser);

                    if (emptyElement)
                        endElement(_parser.Name);
                }
                break;

                case XmlNodeType.EndElement:
                    endElement(_parser.Name);
                    break;

                case XmlNodeType.Text:
                    characters(_parser.Value);
                    break;

                case XmlNodeType.CDATA:
                    characters(_parser.Value);
                    break;

                case XmlNodeType.Comment:
                    characters(_parser.Value);
                    break;

                case XmlNodeType.XmlDeclaration:
                    break;

                case XmlNodeType.ProcessingInstruction:
                    processingInstruction(_parser.Name, _parser.Value);
                    break;

                case XmlNodeType.DocumentType:
                    break;
            }
        }

         // process last data pieces
        if (children.Count == 0)
            _pos.cur()._trailing += _content;
        else
            children.Last.Value._trailing += _content;

        _content = "";
        _isContentCDATA = false;
    }

Here is the call graph for this function:

void XMLStorage::XMLDocReader::startCDATA (  ) [inline]

Definition at line 216 of file XMLDocReader.cs.

References _inCDATASection.

    {
        _inCDATASection = true;
    }
void XMLStorage::XMLDocReader::startElement ( string  qName,
XmlReader  reader 
) [inline]

Definition at line 129 of file XMLDocReader.cs.

References _content, _isContentCDATA, _lastTag, _pos, XMLStorage::XMLNode::_trailing, XMLStorage::XMLPos::addDown(), XMLStorage::XMLPos::cur(), XMLStorage::XMLNode::getChildren(), XMLStorage::AbstractXMLNode::setAttributes(), TAG_END, and TAG_START.

Referenced by read().

    {
         // search for content end leaving only whitespaces for _end_leading
        int i = _content.Length;
        for (; i>0; i--) {
            char ch = _content[i-1];
            if (!char.IsWhiteSpace(ch))
                break;
        }

        if (i > 0)
            if (_pos.cur().getChildren().Count == 0) {  // no children in last node?
                if (_lastTag == TAG_START)
                    _pos.cur()._content += _content.Substring(0, i);
                else if (_lastTag == TAG_END)
                    _pos.cur()._trailing += _content.Substring(0, i);
                // else TAG_NONE -> don't store white space in root node
            } else
                _pos.cur().getChildren().Last.Value._trailing += _content.Substring(0, i);

        string leading = "";

        if (i < _content.Length)
            leading = _content.Substring(i);

        XMLNode node = new XMLNode(qName, leading);
        //XMLNode node = new XMLNode(XMLHelper.String_from_XML_Char(qName), leading);

        _pos.addDown(node);

        node.setAttributes(reader);

        _lastTag = TAG_START;
        _content = "";
        _isContentCDATA = false;
    }

Here is the call graph for this function:


Member Data Documentation

string XMLStorage::XMLDocReader::_content = "" [private]

Definition at line 120 of file XMLDocReader.cs.

Referenced by characters(), endElement(), read(), and startElement().

Definition at line 213 of file XMLDocReader.cs.

Referenced by characters(), endCDATA(), and startCDATA().

StringBuilder XMLStorage::XMLDocReader::_instructions = new StringBuilder() [private]

Definition at line 121 of file XMLDocReader.cs.

Referenced by getInstructions(), and processingInstruction().

Definition at line 214 of file XMLDocReader.cs.

Referenced by characters(), endElement(), read(), and startElement().

Definition at line 126 of file XMLDocReader.cs.

Referenced by endElement(), startElement(), and XMLDocReader().

XmlReader XMLStorage::XMLDocReader::_parser [private]

Definition at line 118 of file XMLDocReader.cs.

Referenced by read().

Definition at line 117 of file XMLDocReader.cs.

Referenced by endElement(), read(), startElement(), and XMLDocReader().

int XMLStorage::XMLDocReader::TAG_END = 2 [static, private]

Definition at line 125 of file XMLDocReader.cs.

Referenced by endElement(), and startElement().

int XMLStorage::XMLDocReader::TAG_NONE = 0 [static, private]

Definition at line 123 of file XMLDocReader.cs.

Referenced by XMLDocReader().

int XMLStorage::XMLDocReader::TAG_START = 1 [static, private]

Definition at line 124 of file XMLDocReader.cs.

Referenced by endElement(), and startElement().


The documentation for this class was generated from the following file: