103

以前にこれを行ったことがあることは知っていますが、今日は機能していません。また、その方法を説明している場所も見つかりません。私の寝不足かもしれませんが、グレムリンの疑いがあります。

XML ドキュメントと、それを定義する XSD でいっぱいのディレクトリがあります。Visual IDE を設定して、検証の失敗を通知し、特定のコンテキストで有効なタグと属性の Intellisense リストを提供するにはどうすればよいですか?

私が試したこと:

  • XML ドキュメントを含むプロジェクトに XSD を追加しました。
  • XSD を XML スキーマ リスト (XML / Schemas... メニュー項目の下) に追加しました。
  • XML ドキュメントには、schemaLocation 属性と noNamespaceSchemaLocation 属性も含めました。

Visual Studio は、有用なデバッグ情報や編集情報をまだ提供していません。私は2010年と2008年の両方を試しました(私は2008年にそれをやったことがあると思いました)

更新:別の開発者にこれを試してもらいましたが、彼も失敗しました。彼は、他の XML 文書でそれを行い、それが機能したことを知っています。次に、Oxygen XML エディターをダウンロードしたところ、同じ XML および XSD ファイルで問題なく動作したため、ファイルは問題ないようです (または、Oxygen の方が寛容で柔軟です . . . )

4

5 に答える 5

143

Visual Studio の XML ドキュメントを、所有している XSD ファイルに関連付ける必要があります。

  1. XML ドキュメントの [プロパティ] ウィンドウに次のように表示されます。

    XML プロパティ > スキーマ

  2. XML スキーマ セット エディター ([プロパティ] ウィンドウの [スキーマ] テキスト ボックスの (...) 省略記号をクリックすると開きます) で、スキーマが存在することを確認する必要があります。また、Useそのスキーマの列が有効になっていることを確認してください。そうでない場合は、クリックしてください。オプションのドロップダウン リストが表示されるのでUse、緑色のチェックマークが付いているものを選択します。

    XML スキーマ セレクター

  3. Visual Studio のエラー一覧ウィンドウが表示されていることを確認します (メニュー [表示] > [エラー一覧])。これにより、XML と XSD スキーマ定義の間のすべての不一致が表示されます。

  4. すべてが整ったら、Visual Studio XML エディターは、青色の波線を使用して、エディター内の XML の問題を強調表示する必要があります。

    エラーの例

于 2010-07-01T20:44:05.803 に答える
36

Visual Studio でファイルを手動で関連付ける必要はありません。XML ファイルと XSD ファイルを両方とも開いていて、名前空間が正しく定義されていれば、自動的に対応付けられます。

名前空間を定義するには:

XML ファイルのルート要素で:

<Data xmlns='http://yourdomain.com/yourschema.xsd'>
    ...
</Data>

XSD ファイルのスキーマ要素:

<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://yourdomain.com/yourschema.xsd"
    xmlns:this="http://yourdomain.com/yourschema.xsd"
    elementFormDefault="qualified">
    ...
</xs:schema>

targetNamespace がある場合にスキーマでタイプを使用する場合の注意事項

スキーマでa を指定しているためtargetNamespace、スキーマで定義された型への参照には名前空間をプレフィックスとして付ける必要があります (これが、上記の要素xmlns:thisに属性を追加した理由です)。<xs:schema />

<!-- Define the type as normal -->
<xs:complexType name="Row">
    <xs:sequence>
        <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
        <xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
    </xs:sequence>
</xs:complexType>
<!-- Use the type (note the "this:" prefix) -->
<xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />
于 2013-05-30T08:48:48.753 に答える
3

ここでのもう 1 つの障害点は、Windows 7 のスキーマ ファイルの「ブロック」です。ディスク上の xsd ファイルを右クリックし、[プロパティ] > [全般] をクリックします。ブロックされている場合は、[ブロック解除] ボタンが表示されます。これにより、VS2012 で XML 検証が失敗していました。

于 2013-07-24T12:44:18.617 に答える
1

xsd には"targetNamespace" /schema/@targetNamespace、xml で参照している名前空間と同様の属性が含まれていますか?

例:

XSD :

<xs:schema .... targetNamespace="Datafile.xsd" ... >

XML :

<data xmlns="Datafile.xsd" >...</data>

関連項目: XML/XSD インテリセンスが Visual Studio 2010 で機能しない

于 2010-11-29T16:13:54.993 に答える
0

私はこれと同じ問題を抱えていましたが、VSは私のスキーマをすでに正しく参照していました。検証しようとしていたファイルには、「xml」ファイル拡張子がありませんでした。ファイル名の末尾に .xml を追加すると、検証が機能し始めました。

于 2012-09-28T20:15:32.817 に答える