Visual Studio IDE에서 XSD를 사용한 XML 유효성 검사


96

이전에이 작업을 수행했지만 오늘은 작동하지 않으며 수행 방법을 설명하는 곳을 찾을 수 없습니다. 수면 부족 일 수 있지만 그렘린이 의심됩니다.

XML 문서와이를 정의하는 XSD로 가득 찬 디렉토리가 있습니다. 유효성 검사 실패를 알리고 주어진 컨텍스트에서 유효한 태그 및 특성의 지능적인 목록을 제공하도록 Visual IDE를 설정하려면 어떻게해야합니까?

내가 시도한 것 :

  • XML 문서로 프로젝트에 XSD를 추가했습니다.
  • XML Schema 목록 (XML / Schemas ... 메뉴 항목 아래)에 XSD를 추가했습니다.
  • XML 문서에 schemaLocation 및 noNamespaceSchemaLocation 속성도 포함했습니다.

Visual Studio는 여전히 유용한 디버깅 또는 편집 정보를 포기하지 않습니다. 나는 2010 년과 2008 년을 둘 다 시도했다 (나는 2008 년에 전에 해본 적이 있다고 생각했다)

업데이트 : 다른 개발자가 이것을 시도했지만 그에게도 실패했습니다. 그는 자신이 다른 XML 문서로이 작업을 수행했으며 제대로 작동했음을 알고 있습니다. 그런 다음 Oxygen XML 편집기를 다운로드했고 동일한 XML 및 XSD 파일에서 제대로 작동하므로 파일이 괜찮은 것 같습니다 (또는 Oxygen이 더 관대하고 유연합니다....)

답변:


138

Visual Studio의 XML 문서를 가지고있는 XSD 파일과 연결해야합니다.

  1. XML 문서의 속성 창에 다음과 같은 내용이 표시되어야합니다.

    XML 속성> 스키마

  2. XML 스키마 집합 편집기 (속성 창의 "스키마"텍스트 상자에서 (...) 줄임표를 클릭하면 열림)에서 스키마가 있는지 확인해야합니다. 또한 Use해당 스키마에 대한 열이 활성화되어 있는지 확인합니다. 그렇지 않은 경우 클릭하면 옵션 드롭 다운 목록이 Use표시되고 녹색 확인 표시가있는 항목을 선택합니다 .

    XML 스키마 선택기

  3. Visual Studio의 오류 목록 창이 표시되는지 확인합니다 (메뉴보기> 오류 목록). 이것은 XML과 XSD 스키마 정의 사이의 모든 불일치를 보여줍니다.

  4. 모든 것이 준비되면 Visual Studio XML 편집기는 파란색 물결 선을 사용하여 편집기에서 XML 문제를 강조 표시해야합니다.

    오류의 예


고마워요, 아주 자세한 설명이지만 여전히 작동하지 않습니다. 그런 속성에서 스키마 목록을 얻을 수 있는지 몰랐습니다.
Jim McKeeth

@Jim McKeeth : XML을 수정하고 다시 저장하면 어떨까요? 때때로 XML 유효성 검사를 시작하려면 트리거가 필요합니다 ...
marc_s 2010-07-01

나를 위해 작동하지 않았지만 귀하의 답변을 수락했습니다. 나는 내 시스템이 단지 호스가 꽂혀 있다고 생각하지만 새 컴퓨터로 옮겼으며 이제 모든 것이 잘 작동합니다.
Jim McKeeth

38
아니 당신이 같은 문제가 있었다,하지만 난 XML 파일을 편집기에서 열려 있어야하고 초점이 있어야합니다 것을 깨달았다 전에 시간의 말도 안되는 금액을 지출하는 경우 @jim 편집기에서 이 속성 창을 호출합니다. 그래야만 스키마를 할당 할 수있는 "XML 문서"속성을 얻을 수 있습니다. 포커스가 솔루션 탐색기에있는 경우 속성 창에는 파일 속성 만 표시됩니다. 즉, 스키마 할당이 불가능합니다.
herzbube

2
답변 자체에 @herzbube의 결과를 추가해야한다고 생각합니다.
ashish

35

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가있을 때 스키마에서 유형 사용에 대한 참고 사항

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

3

여기서 또 다른 실패 지점은 Windows 7 "차단"스키마 파일입니다 ... 디스크의 xsd 파일을 마우스 오른쪽 버튼으로 클릭하고 속성> 일반을 클릭합니다. 차단 된 경우 "차단 해제"버튼이 표시됩니다. 이로 인해 VS2012에서 XML 유효성 검사가 실패했습니다.



0

나는이 같은 문제가 있었지만 VS는 이미 내 스키마를 올바르게 참조하고있었습니다. 확인하려는 파일에 'xml'파일 확장자가없는 것으로 밝혀졌습니다. 내 파일 이름 끝에 .xml을 추가하고 유효성 검사가 작동하기 시작했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.