private void LoadDocumentType(IDtdInfo dtdInfo, XmlDocumentType dtNode) { SchemaInfo schInfo = dtdInfo as SchemaInfo; if (schInfo == null) { throw new XmlException(SR.Xml_InternalError, string.Empty); } dtNode.DtdSchemaInfo = schInfo; if (schInfo != null) { //set the schema information into the document _doc.DtdSchemaInfo = schInfo; // Notation hashtable if (schInfo.Notations != null) { foreach (SchemaNotation scNot in schInfo.Notations.Values) { dtNode.Notations.SetNamedItem(new XmlNotation(scNot.Name.Name, scNot.Pubid, scNot.SystemLiteral, _doc)); } } // Entity hashtables if (schInfo.GeneralEntities != null) { foreach (SchemaEntity scEnt in schInfo.GeneralEntities.Values) { XmlEntity ent = new XmlEntity(scEnt.Name.Name, scEnt.Text, scEnt.Pubid, scEnt.Url, scEnt.NData.IsEmpty ? null : scEnt.NData.Name, _doc); ent.SetBaseURI(scEnt.DeclaredURI); dtNode.Entities.SetNamedItem(ent); } } if (schInfo.ParameterEntities != null) { foreach (SchemaEntity scEnt in schInfo.ParameterEntities.Values) { XmlEntity ent = new XmlEntity(scEnt.Name.Name, scEnt.Text, scEnt.Pubid, scEnt.Url, scEnt.NData.IsEmpty ? null : scEnt.NData.Name, _doc); ent.SetBaseURI(scEnt.DeclaredURI); dtNode.Entities.SetNamedItem(ent); } } _doc.Entities = dtNode.Entities; //extract the elements which has attribute defined as ID from the element declarations IDictionaryEnumerator elementDecls = schInfo.ElementDecls.GetEnumerator(); if (elementDecls != null) { elementDecls.Reset(); while (elementDecls.MoveNext()) { SchemaElementDecl elementDecl = (SchemaElementDecl)elementDecls.Value; if (elementDecl.AttDefs != null) { IDictionaryEnumerator attDefs = elementDecl.AttDefs.GetEnumerator(); while (attDefs.MoveNext()) { SchemaAttDef attdef = (SchemaAttDef)attDefs.Value; if (attdef.Datatype.TokenizedType == XmlTokenizedType.ID) { //we only register the XmlElement based on their Prefix/LocalName and skip the namespace _doc.AddIdInfo( _doc.AddXmlName(elementDecl.Prefix, elementDecl.Name.Name, string.Empty, null), _doc.AddAttrXmlName(attdef.Prefix, attdef.Name.Name, string.Empty, null)); break; } } } } } } }
private void LoadDocumentType(XmlValidatingReader vr, XmlDocumentType dtNode) { SchemaInfo schInfo = vr.GetSchemaInfo(); if (schInfo != null) { //set the schema information into the document doc.SchemaInformation = schInfo; // Notation hashtable if (schInfo.Notations != null) { foreach (SchemaNotation scNot in schInfo.Notations.Values) { dtNode.Notations.SetNamedItem(new XmlNotation(scNot.Name.Name, scNot.Pubid, scNot.SystemLiteral, doc)); } } // Entity hashtables if (schInfo.GeneralEntities != null) { foreach (SchemaEntity scEnt in schInfo.GeneralEntities.Values) { XmlEntity ent = new XmlEntity(scEnt.Name.Name, scEnt.Text, scEnt.Pubid, scEnt.Url, scEnt.NData.IsEmpty ? null : scEnt.NData.Name, doc); ent.SetBaseURI(scEnt.DeclaredURI); dtNode.Entities.SetNamedItem(ent); } } if (schInfo.ParameterEntities != null) { foreach (SchemaEntity scEnt in schInfo.ParameterEntities.Values) { XmlEntity ent = new XmlEntity(scEnt.Name.Name, scEnt.Text, scEnt.Pubid, scEnt.Url, scEnt.NData.IsEmpty ? null : scEnt.NData.Name, doc); ent.SetBaseURI(scEnt.DeclaredURI); dtNode.Entities.SetNamedItem(ent); } } doc.Entities = dtNode.Entities; //extract the elements which has attribute defined as ID from the element declarations IDictionaryEnumerator elementDecls = schInfo.ElementDecls.GetEnumerator(); if (elementDecls != null) { elementDecls.Reset(); while (elementDecls.MoveNext()) { SchemaElementDecl elementDecl = (SchemaElementDecl)elementDecls.Value; if (elementDecl.AttDefs != null) { IDictionaryEnumerator attDefs = elementDecl.AttDefs.GetEnumerator(); while (attDefs.MoveNext()) { SchemaAttDef attdef = (SchemaAttDef)attDefs.Value; if (attdef.Datatype.TokenizedType == XmlTokenizedType.ID) { doc.AddIdInfo( doc.GetXmlName(elementDecl.Name.Name, elementDecl.Name.Namespace), doc.GetXmlName(attdef.Name.Name, attdef.Name.Namespace)); break; } } } } } } }