private XmlNode LoadCurrentNode()
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
return(LoadElementNode());
case XmlNodeType.Attribute:
return(LoadAttributeNode());
case XmlNodeType.Text:
return(doc.CreateTextNode(reader.Value));
case XmlNodeType.SignificantWhitespace:
return(doc.CreateSignificantWhitespace(reader.Value));
case XmlNodeType.Whitespace:
// Cannot create a function from this code, b/c this code does not return a whitespace node if preserceWS is false
if (preserveWhitespace)
{
return(doc.CreateWhitespace(reader.Value));
}
// if preserveWhitespace is false skip all subsequent WS nodes and position on the first non-WS node
do
{
if (!reader.Read())
{
return(null);
}
} while (reader.NodeType == XmlNodeType.Whitespace);
return(LoadCurrentNode()); // Skip WS node if preserveWhitespace is false
case XmlNodeType.CDATA:
return(doc.CreateCDataSection(reader.Value));
case XmlNodeType.EntityReference:
return(LoadEntityReferenceNode());
case XmlNodeType.XmlDeclaration:
return(LoadDeclarationNode());
case XmlNodeType.ProcessingInstruction:
return(doc.CreateProcessingInstruction(reader.Name, reader.Value));
case XmlNodeType.Comment:
return(doc.CreateComment(reader.Value));
case XmlNodeType.DocumentType:
return(LoadDocumentTypeNode());
case XmlNodeType.EndElement:
case XmlNodeType.EndEntity:
return(null);
default:
throw new InvalidOperationException(string.Format(Res.GetString(Res.Xdom_Load_NodeType), reader.NodeType.ToString()));
}
}