0

インライン スキーマ検証を使用して xml ファイルを読み取ると、このエラーが発生します。XML ファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<SysConfig xmlns="PM-NameSpace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SysConfig.xsd">
...
</SysConfig>

XSD ファイルは XML ファイルと同じフォルダーにあり、「SysConfig.xsd」と呼ばれ、次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="PM-NameSpace" targetNamespace="PM-NameSpace">
...
</xs:schema>

コードでインライン スキーマ検証を行いたいので、C# は次のようになります。

XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
xmlReaderSettings.ValidationType = ValidationType.Schema;
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
xmlReaderSettings.ValidationEventHandler += new ValidationEventHandler(handler);
XmlReader xmlReader = XmlReader.Create(sysConfigPath, xmlReaderSettings);
XmlDocument sysConfigXmlDocument = new XmlDocument();
sysConfigXmlDocument.Load(xmlReader);

Load が呼び出されるとすぐに (最後の行)、検証イベント ハンドラーが呼び出されます。実際のメッセージは次のとおりです。

名前空間 ' ' のスキーマを読み込めません - targetNamespace パラメータ ' ' は、スキーマの targetNamespace 'PM-NameSpace' と同じ値である必要があります。

これは、何かがデフォルトの ('') 名前空間を使用していることを示しているようですが、私は xlmns とターゲットの名前空間を非常に慎重に指定しました。"The targetNamespace parameter ' ' ..." というエラー メッセージの意味がわかりません - targetNamespace属性が指定されており、空白ではありません (' ') - XML 用語での " parameter " が何であるかわかりません- または、C# コード内の (または欠落している) 何かを参照していますか? 誰でも光を当てることができますか?

4

1 に答える 1

1

私はこの問題に遭遇したことはありませんが、これが発生する理由は、名前空間を持たないxsi:noNamespaceSchemaLocationXML の XSD の場所を実際に示しているためだと思います。XML には実際に名前空間があるため、その属性を次のように置き換える必要があると思います。

xsi:schemaLocation="PM-NameSpace SysConfig.xsd"
于 2013-01-11T18:04:24.747 に答える