XmlSchema.Read в .NET
<xs:element name="import-schema" substitutionGroup="xsl:declaration">
<xs:complexType>
<xs:complexContent>
<xs:extension base="xsl:element-only-versioned-element-type">
<xs:sequence>
<xs:element ref="xs:schema" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="namespace" type="xs:anyURI"/>
<xs:attribute name="schema-location" type="xs:anyURI"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
2. Правильный ответ такой (некоторое шаманство с prohibitDtd и явным добавлением XMlSchema.xsd нужно, т.к. автоматически по include/schemalocation Xmlschema.xsd не подхватывается — запрещена обработка этого самого dtd):
static void SomeMethod
{
XmlSchemaSet schemaSet = new XmlSchemaSet;
XmlTextReader reader = new XmlTextReader("http://www.w3.org/2001/XMLSchema.xsd");
reader.ProhibitDtd = false;
schemaSet.ValidationEventHandler +=new ValidationEventHandler(schemaSet_ValidationEventHandler);
schemaSet.Add(null, reader);
schemaSet.Add(null, "http://www.w3.org/2007/schema-for-xslt20.xsd");
schemaSet.Compile;
}
static void schemaSet_ValidationEventHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
Console.Write("WARNING: ");
Console.WriteLine(e.Message);
}
else if (e.Severity == XmlSeverityType.Error)
{
Console.Write("ERROR: ");
Console.WriteLine(e.Message);
}
}
Огромное спасибо!
Оставить комментарий
freezer
Такая проблема:Сначала качаю XSD-схему для XSLT, отсюда: http://www.w3.org/2007/schema-for-xslt20.xsd
Потом пытаюсь её загрузить таким кодом:
На Compile получаем исключение:
Отсюда вопрос: у кого кривые руки, у MS, у W3C или у меня, и как исправить, чтоб работало?