Xác thực XML với XSD trong Visual Studio IDE


96

Tôi biết tôi đã làm điều này trước đây, nhưng nó không hoạt động ngày hôm nay, tôi cũng không thể tìm thấy bất kỳ nơi nào giải thích cách làm điều đó. Đó có thể là do tôi thiếu ngủ, nhưng tôi nghi ngờ là Gremlins.

Tôi có một tài liệu XML và một thư mục chứa đầy XSD định nghĩa nó. Làm cách nào để thiết lập Visual IDE để thông báo cho tôi về các lỗi xác thực và sau đó cung cấp danh sách intellisense gồm các thẻ và thuộc tính hợp lệ trong một ngữ cảnh nhất định?

Những gì tôi đã thử:

  • Tôi đã thêm XSD vào dự án bằng tài liệu XML.
  • Tôi đã thêm XSD vào danh sách Lược đồ XML (trong mục menu XML / Lược đồ ...).
  • Tôi thậm chí còn bao gồm các thuộc tính schemaLocation và noNamespaceSchemaLocation vào tài liệu XML.

Visual Studio vẫn không từ bỏ bất kỳ thông tin sửa lỗi hoặc chỉnh sửa hữu ích nào. Tôi đã thử cả năm 2010 và 2008 (tôi đã từng làm điều đó vào năm 2008, tôi nghĩ vậy)

Cập nhật: Tôi đã có một nhà phát triển khác thử điều này và nó cũng không thành công đối với anh ta. Anh ấy biết anh ấy đã làm điều đó với các tài liệu XML khác và nó đã hoạt động. Sau đó, tôi đã tải xuống trình chỉnh sửa Oxygen XML và nó hoạt động tốt trên cùng các tệp XML và XSD, vì vậy các tệp có vẻ ổn (hoặc Oxy dễ tha thứ hơn / linh hoạt hơn...)

Câu trả lời:


138

Bạn sẽ cần liên kết tài liệu XML trong Visual Studio với tệp XSD mà bạn có.

  1. Bạn sẽ thấy một cái gì đó như thế này trong cửa sổ Thuộc tính của tài liệu XML:

    Thuộc tính XML> Lược đồ

  2. Trong trình soạn thảo tập hợp lược đồ XML (sẽ mở ra khi bạn nhấp vào dấu chấm lửng (...) trong hộp văn bản "Lược đồ" trong cửa sổ Thuộc tính), bạn cần đảm bảo rằng bạn có lược đồ của mình. Ngoài ra, hãy đảm bảo rằng Usecột cho lược đồ đó đã được bật - nếu không, hãy nhấp vào nó - bạn sẽ nhận được danh sách tùy chọn thả xuống, chọn Usemột tùy chọn có dấu kiểm màu xanh lá cây:

    Bộ chọn lược đồ XML

  3. Đảm bảo cửa sổ Danh sách lỗi của Visual Studio hiển thị (menu Xem> Danh sách lỗi). Điều này sẽ hiển thị tất cả sự mâu thuẫn giữa các định nghĩa lược đồ XML và XSD.

  4. Khi tất cả những điều đó đã sẵn sàng, trình chỉnh sửa Visual Studio XML sẽ làm nổi bật các vấn đề với XML của bạn trong trình chỉnh sửa bằng cách sử dụng hình vuông màu xanh lam:

    Ví dụ về lỗi


Cảm ơn, đó là một lời giải thích chi tiết tuyệt vời, nhưng của tôi vẫn không hoạt động. Tôi không biết bạn có thể truy cập danh sách lược đồ từ các thuộc tính như vậy.
Jim McKeeth

@Jim McKeeth: điều gì sẽ xảy ra nếu bạn sửa đổi XML của mình và lưu nó lại? Đôi khi xác nhận XML cần một kích hoạt để đá trong ...
marc_s

Tôi đã chấp nhận câu trả lời của bạn mặc dù nó không phù hợp với tôi. Tôi đoán rằng hệ thống của tôi vừa mới bị hỏng, nhưng tôi đã chuyển sang một máy tính mới và mọi thứ hiện hoạt động tốt.
Jim McKeeth

38
@jim Không chắc bạn có gặp phải vấn đề tương tự hay không, nhưng tôi đã dành một khoảng thời gian vô lý trước khi nhận ra rằng tệp XML phải được mở trong trình chỉnh sửa và tiêu điểm phải nằm trong trình chỉnh sửa khi bạn gọi cửa sổ Thuộc tính. Chỉ khi đó, bạn mới nhận được các thuộc tính "Tài liệu XML", nơi bạn có thể gán một lược đồ. Nếu tiêu điểm nằm trong Trình khám phá Giải pháp, cửa sổ Thuộc tính chỉ hiển thị các thuộc tính tệp, nghĩa là không thể gán lược đồ ở đó.
herzbube

2
Tôi nghĩ bạn nên thêm những phát hiện của @ herzbube vào chính câu trả lời.
ashish

35

Bạn không cần phải liên kết thủ công các tệp trong Visual Studio - nó sẽ tự động khớp tệp XML với tệp XSD nếu bạn mở cả hai tệp và bạn đã xác định đúng không gian tên của mình.

Để xác định không gian tên:

Trong phần tử gốc của tệp XML:

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

Trong phần tử giản đồ của tệp 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>

Lưu ý về việc sử dụng Các loại trong lược đồ của bạn khi bạn có một targetNamespace

Bởi vì bạn đang chỉ định một targetNamespacetrong lược đồ của mình, bất kỳ tham chiếu nào đến các loại được xác định trong lược đồ sẽ cần phải được đặt trước bằng một không gian tên (đó là lý do tại sao chúng tôi thêm xmlns:thisthuộc tính vào <xs:schema />phần tử trên ).

<!-- 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" />

3

Một điểm thất bại nữa ở đây là Windows 7 "chặn" các tệp lược đồ ... nhấp chuột phải vào tệp xsd trên đĩa, Thuộc tính> Chung và nếu bị chặn, bạn sẽ có nút "Bỏ chặn". Điều này khiến xác thực XML của tôi không thành công trong VS2012.



0

Tôi đã gặp vấn đề tương tự, nhưng VS đã tham chiếu chính xác lược đồ của tôi. Hóa ra tệp tôi đang cố xác thực không có phần mở rộng tệp 'xml'. Đã thêm .xml vào cuối tên tệp của tôi và xác thực bắt đầu hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.