private QName InferMergedType(string value, QName typeName)
{
// examine value against specified type and
// if unacceptable, then return a relaxed type.
SimpleType st = XmlSchemaType.GetBuiltInSimpleType(
typeName);
if (st == null) // non-primitive type => see above.
{
return(QNameString);
}
do
{
try {
st.Datatype.ParseValue(value,
source.NameTable,
source as IXmlNamespaceResolver);
return(typeName);
} catch {
st = st.BaseXmlSchemaType as XmlSchemaSimpleType;
typeName = st != null ? st.QualifiedName : QName.Empty;
}
} while (typeName != QName.Empty);
return(QNameString);
}