XMLSchema に対して XML を検証していました。 targetnamespace を割り当てると、エラーがスローされます。
私のコードは以下の通りです。
string
ab="<HostName>Arasanalu</HostName><AdminUserName>Administrator</AdminUserName>
<AdminPassword>A1234</AdminPassword><PlaceNumber>38</PlaceNumber>"
try
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.AllowXmlAttributes;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
// settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
//settings.Schemas.Add("http://www.w3.org/2001/XMLSchema","ab1.xml");
settings.Schemas.Add(null, XmlReader.Create(new StringReader(@"<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema"" targetNamespace=""root"">
<xs:element name=""root"" type=""RootElementType""/>
<xs:complexType name=""RootElementType"">
<xs:sequence>
<xs:any minOccurs=""1"" maxOccurs=""unbounded"" processContents=""lax""/>
</xs:sequence>
</xs:complexType>
</xs:schema>
<bp:root xmlns:bp=""myNamespace"">
<parameters>ab</parameters>
</bp:root>
</root>")));
// Create the XmlReader object.
XmlReader xmlrdr = XmlReader.Create(new StringReader("<root>" + ab+ "</root>"),settings);
// Parse the file.
while (xmlrdr.Read()) ;
それはエラーを投げていました:
ex = {"Type 'RootElementType' is not declared."}
TargetNamespace を削除すると、任意の要素に processContents=""lax"" を指定すると正常に機能します。
targetnamespace の使用法を正しく機能させる方法を教えてください (特定の名前空間に対してデフォルトの「strict」を使用するため、processContents=""lax"" を削除できるようにします)。
よろしく、
チャンナ