bool XmlNodeReader::get_Eof() const { switch (get_ReadState()) { case Ext::ReadState::EndOfFile: case Ext::ReadState::Error: return true; } return false; }
bool XmlNodeReader::Read() const { switch (get_ReadState()) { case Ext::ReadState::EndOfFile: case Ext::ReadState::Error: case Ext::ReadState::Closed: return false; case Ext::ReadState::Initial: m_linkedNode = m_cur = m_startNode; m_readState = Ext::ReadState::Interactive; return bool(m_cur); } // TRC(4, int(m_cur.NodeType) << " " << &m_cur.R << " StartNode type: " << int(m_startNode.NodeType) << " " << &m_startNode.R); MoveToElement(); if (XmlNode firstChild = !m_bEndElement ? m_cur.FirstChild : XmlNode()) { ++m_depth; m_linkedNode = m_cur = firstChild; return true; } if (m_cur == m_startNode) { if (!(m_bEndElement = !IsEmptyElement() && !m_bEndElement)) { m_cur = XmlNode(); m_readState = ReadState::EndOfFile; } m_linkedNode = m_cur; return m_bEndElement; } XmlNodeType curType = m_cur.NodeType; if (!m_bEndElement && !IsEmptyElement() && curType==XmlNodeType::Element) return m_bEndElement = true; if (XmlNode next = m_cur.NextSibling) { m_linkedNode = m_cur = next; return !(m_bEndElement = false); } XmlNode parent; if (curType != XmlNodeType::Document) { parent = m_cur.ParentNode; // TRC(4, "Parent: " << int(parent.NodeType) << " " << &parent.R); } if (m_bEndElement = parent && parent!=m_startNode) { m_cur = parent; --m_depth; } else { m_cur = nullptr; m_readState = ReadState::EndOfFile; } m_linkedNode = m_cur; return m_bEndElement; }
int XmlNodeReader::get_AttributeCount() const { if (get_ReadState() != ReadState::Interactive || m_bEndElement || !m_cur) return 0; XmlAttributeCollection attrs = m_linkedNode.Attributes; return attrs ? attrs.Count : 0; }
bool XmlTextReader::Read() const { if (Ext::ReadState::Closed == get_ReadState()) return false; //!!!R ReadState = ReadState::Interactive; return XmlCheck(xmlTextReaderRead(ToReader(m_p))); }