internal string InternalReadContentAsString()
{
string value = string.Empty;
StringBuilder sb = null;
do
{
switch (this.NodeType)
{
case XmlNodeType.Attribute:
return this.Value;
case XmlNodeType.Text:
case XmlNodeType.Whitespace:
case XmlNodeType.SignificantWhitespace:
case XmlNodeType.CDATA:
// merge text content
if (value.Length == 0)
{
value = this.Value;
}
else
{
if (sb == null)
{
sb = new StringBuilder();
sb.Append(value);
}
sb.Append(this.Value);
}
break;
case XmlNodeType.ProcessingInstruction:
case XmlNodeType.Comment:
case XmlNodeType.EndEntity:
// skip comments, pis and end entity nodes
break;
case XmlNodeType.EntityReference:
if (this.CanResolveEntity)
{
this.ResolveEntity();
break;
}
goto default;
case XmlNodeType.EndElement:
default:
goto ReturnContent;
}
} while ((this.AttributeCount != 0) ? this.ReadAttributeValue() : this.Read());
ReturnContent:
return (sb == null) ? value : sb.ToString();
}