文章目錄
使用 XSD 為 XML 客製 Intellisense 輸入選單
同事負責的專案中有個自訂的 XML,主要用來紀錄一些不同 partner 的設定資訊。因為 partner 很多,常有新增或是調整這個 XML 的需求,為了避免人為輸入資料錯誤,想要在編輯 XML 時加上 intellisense 清單選擇提示
印象中我好像沒有這麼做過,但直覺上應該可行,畢竟 Visual Studio 編輯 web.config 也有類似功能,就來看看可以怎麼做吧
自訂 XML 內容
<?xml version="1.0" encoding="utf-8" ?>
<YowkoList>
<YowkoItem YowkoCloth="1">
<YowkoType>Paints</YowkoType>
</YowkoItem>
</YowkoList>
加入 XSD
- XSD 可以從外部匯入也可以直接新增在專案中(視是否要與外部共用)
以新增至專案為例:新增位置 按右鍵 –> Add –> New Item…
XML Schema –> 給個名字
預設畫面
編輯 XSD
使用 XML Editor 來編輯
預設 XSD 內容
<?xml version="1.0" encoding="utf-8"?> <xs:schema id="Test" targetNamespace="http://tempuri.org/Test.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/Test.xsd" xmlns:mstns="http://tempuri.org/Test.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" > </xs:schema>
將
id
、targetNamespace
、xmlns
、xmlns:mstns
修改易於識別的內容<?xml version="1.0" encoding="utf-8"?> <xs:schema id="YowkoSchema" targetNamespace="http://yowko.com/YowkoSchema.xsd" elementFormDefault="qualified" xmlns="http://yowko.com/YowkoSchema.xsd" xmlns:mstns="http://yowko.com/YowkoSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" > </xs:schema>
id
實測下不影響功能targetNamespace
則需與xmlns:xs
內容需一致
加上 XSD 定義
定義 intellisense 選單
清單叫為
YowkoCloth
,是 integer 格式<xs:simpleType name="YowkoCloth"> <xs:restriction base="xs:integer"> <xs:enumeration value="1"></xs:enumeration> <xs:enumeration value="5"></xs:enumeration> <xs:enumeration value="10"></xs:enumeration> <xs:enumeration value="11"></xs:enumeration> </xs:restriction> </xs:simpleType>
定義 intellisense 選單使用方式
定義為
YowkoElement
中的YowkoCloth
attribute<xs:complexType name="YowkoElement"> <xs:attribute name="YowkoCloth" type="YowkoSize" use="required"></xs:attribute> </xs:complexType>
定義 YowkoElement 使用方式
根物件
YowkoList
有個類型為YowkoElement
的YowkoItem
element<xs:element name="YowkoList"> <xs:complexType> <xs:sequence> <xs:element name="YowkoItem" type="YowkoElement" minOccurs="0" maxOccurs="unbounded"> </xs:element> </xs:sequence> </xs:complexType> </xs:element>
完整 XSD
<?xml version="1.0" encoding="utf-8"?> <xs:schema id="YowkoSchema" targetNamespace="http://yowko.com/YowkoSchema.xsd" elementFormDefault="qualified" xmlns="http://yowko.com/YowkoSchema.xsd" xmlns:mstns="http://yowko.com/YowkoSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" > <xs:simpleType name="YowkoSize"> <xs:restriction base="xs:integer"> <xs:enumeration value="1"></xs:enumeration> <xs:enumeration value="5"></xs:enumeration> <xs:enumeration value="10"></xs:enumeration> <xs:enumeration value="11"></xs:enumeration> </xs:restriction> </xs:simpleType> <xs:complexType name="YowkoElement"> <xs:sequence> <xs:element name="YowkoType" type="xs:string"></xs:element> </xs:sequence> <xs:attribute name="YowkoCloth" type="YowkoSize" use="required"></xs:attribute> </xs:complexType> <xs:element name="YowkoList"> <xs:complexType> <xs:sequence> <xs:element name="YowkoItem" type="YowkoElement" minOccurs="0" maxOccurs="unbounded"> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XML 加上使用自訂 XSD
在根 element 加上 namesspace 引用
xmlns="http://yowko.com/YowkoSchema.xsd"
完整 XML
<?xml version="1.0" encoding="utf-8" ?> <YowkoList xmlns="http://yowko.com/YowkoSchema.xsd"> <YowkoItem YowkoCloth="1"> <YowkoType>Paints</YowkoType> </YowkoItem> </YowkoList>
實際效果
編輯提示(會出現提示選單供選擇)
輸入
<
也會有 element 提示輸入未在清單之值會出現錯誤提示
輸入未在清單之值也會出現在 build warning 中
心得
實際流程不多,但網路上資源並不好找,我猜想可能對這個功能的需求不多,畢竟編輯 XML 的大多數是工程師,XML 格式是固定的,與其花這個時間做 XML intellisense 大家應該都會選擇把時間拿出開發其他功能吧
參考資訊
文章作者 Yowko Tsai
上次更新 2021-10-04
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。