Ejemplo n.º 1
0
bool XmlNodeReader::get_Eof() const {
	switch (get_ReadState()) {
	case Ext::ReadState::EndOfFile:
	case Ext::ReadState::Error:
		return true;
	}
	return false;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
bool XmlTextReader::Read() const {
	if (Ext::ReadState::Closed == get_ReadState())
		return false;
//!!!R	ReadState = ReadState::Interactive;
	return XmlCheck(xmlTextReaderRead(ToReader(m_p)));
}