การตรวจสอบ XML ด้วย XSD ใน Visual Studio IDE


98

ฉันรู้ว่าฉันเคยทำสิ่งนี้มาก่อน แต่มันไม่ได้ผลในวันนี้และฉันไม่พบที่ไหนที่อธิบายวิธีการทำ อาจเป็นเพราะฉันนอนไม่พอ แต่ฉันสงสัยว่า gremlins

ฉันมีเอกสาร XML และไดเร็กทอรีที่เต็มไปด้วย XSD ที่กำหนด ฉันจะตั้งค่า Visual IDE เพื่อแจ้งให้ฉันทราบถึงความล้มเหลวในการตรวจสอบความถูกต้องได้อย่างไรจากนั้นให้รายการแท็กและแอตทริบิวต์ที่ถูกต้องในบริบทที่กำหนด

สิ่งที่ฉันได้ลอง:

  • ฉันได้เพิ่ม XSD ลงในโครงการด้วยเอกสาร XML
  • ฉันได้เพิ่ม XSD ลงในรายการ XML Schema แล้ว (ภายใต้รายการเมนู XML / Schemas ... )
  • ฉันได้รวมคุณสมบัติ schemaLocation และ noNamespaceSchemaLocation ไว้ในเอกสาร XML ด้วย

Visual Studio ยังคงไม่ละทิ้งข้อมูลการดีบักหรือการแก้ไขที่เป็นประโยชน์ ฉันลองทั้งปี 2010 และ 2008 (ฉันเคยทำมาก่อนในปี 2008 ฉันคิดว่า)

อัปเดต:ฉันให้นักพัฒนารายอื่นลองทำสิ่งนี้และก็ล้มเหลวสำหรับเขา เขารู้ว่าเขาทำกับเอกสาร XML อื่น ๆ และได้ผล จากนั้นฉันดาวน์โหลดตัวแก้ไข Oxygen XML และทำงานได้ดีกับไฟล์ XML และ XSD เดียวกันดังนั้นไฟล์จึงดูเหมือนจะดี (หรือ Oxygen นั้นให้อภัย / ยืดหยุ่นได้มากกว่า)

คำตอบ:


139

คุณจะต้องเชื่อมโยงเอกสาร XML ใน Visual Studio กับไฟล์ XSD ที่คุณมี

  1. คุณควรเห็นสิ่งนี้ในหน้าต่างคุณสมบัติของเอกสาร XML:

    คุณสมบัติ XML> สคีมา

  2. ในตัวแก้ไขชุดสคีมา XML (เปิดขึ้นเมื่อคุณคลิกที่ (... ) จุดไข่ปลาในกล่องข้อความ "สคีมา" ในหน้าต่างคุณสมบัติของคุณ) คุณต้องแน่ใจว่าคุณมีสคีมาของคุณอยู่ ตรวจสอบให้แน่ใจว่าUseคอลัมน์สำหรับสคีมานั้นเปิดใช้งานอยู่หากไม่คลิกที่คอลัมน์นั้นคุณจะได้รับรายการตัวเลือกแบบเลื่อนลงเลือกรายการที่Useมีเครื่องหมายถูกสีเขียว:

    XML Schema Selector

  3. ตรวจสอบให้แน่ใจว่าหน้าต่างรายการข้อผิดพลาดของ Visual Studio มองเห็นได้ (มุมมองเมนู> รายการข้อผิดพลาด) สิ่งนี้จะแสดงความไม่สอดคล้องกันทั้งหมดระหว่างข้อกำหนดสคีมา XML และ XSD

  4. เมื่อทุกอย่างเข้าที่แล้วตัวแก้ไข Visual Studio XML ควรเน้นปัญหาเกี่ยวกับ XML ของคุณในตัวแก้ไขโดยใช้สีน้ำเงิน

    ตัวอย่างข้อผิดพลาด


ขอบคุณนั่นเป็นคำอธิบายโดยละเอียดที่ดี แต่ของฉันยังใช้งานไม่ได้ ฉันไม่รู้ว่าคุณสามารถเข้าถึงรายการสคีมาจากคุณสมบัติเช่นนั้นได้
Jim McKeeth

@ Jim McKeeth: จะเกิดอะไรขึ้นถ้าคุณแก้ไข XML ของคุณและบันทึกอีกครั้ง บางครั้งการตรวจสอบ XML จำเป็นต้องมีทริกเกอร์เพื่อเริ่มต้น ...
marc_s

ฉันยอมรับคำตอบของคุณแม้ว่ามันจะไม่ได้ผลสำหรับฉัน ฉันเดาว่าระบบของฉันเพิ่งถูกปลดออก แต่ฉันได้ย้ายไปยังคอมพิวเตอร์เครื่องใหม่และทุกอย่างทำงานได้ดีในขณะนี้
Jim McKeeth

38
@jim ไม่แน่ใจว่าคุณมีปัญหาเดียวกันหรือไม่ แต่ฉันใช้เวลาไร้สาระก่อนที่ฉันจะรู้ว่าต้องเปิดไฟล์ XML ในตัวแก้ไขและโฟกัสจะต้องอยู่ในตัวแก้ไขเมื่อคุณเรียกหน้าต่างคุณสมบัติ จากนั้นคุณจะได้รับคุณสมบัติ "เอกสาร XML" ซึ่งคุณสามารถกำหนดสคีมาได้ หากโฟกัสอยู่ใน Solution Explorer หน้าต่าง Properties จะแสดงคุณสมบัติของไฟล์เท่านั้นกล่าวคือไม่สามารถกำหนด schema ได้ที่นั่น
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 บนดิสก์คุณสมบัติ> ทั่วไปและหากถูกบล็อกคุณจะมีปุ่ม "เลิกบล็อก" สิ่งนี้ทำให้การตรวจสอบ XML ของฉันล้มเหลวใน VS2012


1

xsd ของคุณมีแอตทริบิวต์หรือไม่ "targetNamespace" /schema/@targetNamespaceที่คล้ายกับเนมสเปซที่คุณอ้างถึงใน xml หรือไม่

ตัวอย่าง:

XSD :

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

XML :

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

ดูเพิ่มเติม: Intellisense XML / XSD ไม่ทำงานใน Visual Studio 2010


0

ฉันมีปัญหาเดียวกันนี้ แต่ VS อ้างอิงสคีมาของฉันอย่างถูกต้องแล้ว ปรากฎว่าไฟล์ที่ฉันพยายามตรวจสอบไม่มีนามสกุลไฟล์ 'xml' เพิ่ม. xml ต่อท้ายชื่อไฟล์ของฉันและการตรวจสอบความถูกต้องก็เริ่มทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.