private bool ReadNextSiblingHelper() {
if (text != null) {
text = null;
textIsWhite = true;
return reader.NodeType != XmlNodeType.EndElement;
} else {
while (reader.Read()) {
switch (reader.NodeType) {
case XmlNodeType.Text:
textIsWhite = false;
goto case XmlNodeType.SignificantWhitespace;
case XmlNodeType.CDATA:
if (textIsWhite && ! IsWhitespace(reader.Value)) {
textIsWhite = false;
}
goto case XmlNodeType.SignificantWhitespace;
case XmlNodeType.Whitespace:
case XmlNodeType.SignificantWhitespace:
if (reader.Depth == 0 && text == null && textIsWhite) {
break; // Ignore whitespace nodes on the root level
}
if (text == null) {
// First chunk of a text node
SaveTextInfo();
}
text += reader.Value;
break;
case XmlNodeType.EntityReference :
Debug.Assert(false, "Entity references should be resolved for us");
break;
case XmlNodeType.DocumentType:
case XmlNodeType.XmlDeclaration:
break;
default:
if (text != null) {
return true;
}
return reader.NodeType != XmlNodeType.EndElement;
}
}
return text != null;
}
}