xml - XML 元素与 DTD 不匹配
问题描述
考虑以下片段 -
DTD
<!DOCTYPE hotels_list [
<!ELEMENT hotels_list ( hotel+ ) >
<!ELEMENT hotel ( id, name, stars, Facilities, Address, distance_from_center, available ) >
<!ELEMENT id ( #PCDATA ) >
<!ELEMENT name ( #PCDATA ) >
<!ELEMENT stars ( #PCDATA ) >
<!ELEMENT Address ( #PCDATA ) >
<!-- Facilities only contains at least one of the options in (internet,gym,restaurant,parking,pickup -->
<!ELEMENT Facilities (Internet*,Gym*,Restaurant*,Parking*,Pickup*) >
<!ELEMENT available ( #PCDATA ) >
<!ELEMENT distance_from_center ( #PCDATA ) >
]>
XML 代码
<hotels_list>
<hotel>
<id>1</id>
<name>Les Jardins Du Marais</name>
<stars>3</stars>
<Facilities>Internet</Facilities>
<Address>74 rue Amelot, Paris, 75011</Address>
<distance_from_center>2</distance_from_center>
<available>True</available>
</hotel>
<hotel>
<id>2</id>
<name>Golden Tulip Little Palace</name>
<stars>4</stars>
<Facilities>Internet,Gym,Parking,Restaurant</Facilities>
<Address>4 rue Salomon
De Caus, Paris 75003</Address>
<distance_from_center>0.1</distance_from_center>
<available>False</available>
</hotel>
</hotels_list>
但设施显示错误为
The content of element type "Facilities" must match "(Internet*,Gym*,Restaurant*,Parking*,Pickup*)".xml(MSG_CONTENT_INVALID)
我在这里遗漏了什么,有人可以帮忙吗?
感谢您的帮助。
解决方案
Facilities
是元素列表,而不是文本内容的正则表达式。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hotels_list [
<!ELEMENT hotels_list (hotel+)>
<!ELEMENT hotel (id, name, stars, Facilities, Address, distance_from_center, available)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT stars (#PCDATA)>
<!ELEMENT Address (#PCDATA)>
<!-- Facilities only contains at least one of the options in (internet,gym,restaurant,parking,pickup -->
<!ELEMENT Facilities (Internet*, Gym*, Restaurant*, Parking*, Pickup*)>
<!ELEMENT Internet (#PCDATA)>
<!ELEMENT Gym (#PCDATA)>
<!ELEMENT Restaurant (#PCDATA)>
<!ELEMENT Parking (#PCDATA)>
<!ELEMENT Pickup (#PCDATA)>
<!ELEMENT available (#PCDATA)>
<!ELEMENT distance_from_center (#PCDATA)>
]>
<hotels_list>
<hotel>
<id>1</id>
<name>Les Jardins Du Marais</name>
<stars>3</stars>
<Facilities><Internet/></Facilities>
<Address>74 rue Amelot, Paris, 75011</Address>
<distance_from_center>2</distance_from_center>
<available>True</available>
</hotel>
<hotel>
<id>2</id>
<name>Golden Tulip Little Palace</name>
<stars>4</stars>
<Facilities><Internet/><Gym/><Restaurant/><Parking/></Facilities>
<Address>4 rue Salomon
De Caus, Paris 75003</Address>
<distance_from_center>0.1</distance_from_center>
<available>False</available>
</hotel>
</hotels_list>
推荐阅读
- python - 在 Python 中使用 tkinter 创建一个小型加/减计算器?
- reactjs - 您可以在 DetailsList 中调用异步函数吗?
- visual-studio-code - Nuxt 和 VS Code 调试 /api
- php - 如何使用 imap_open (PHP) 将收件箱中的 IMAP 文件夹排除在阅读之外
- razor - 带有 Blazor 服务器的条件 div
- laravel-6 - 如何用 Laravel 中的变量表示请求外观?
- events - Service Worker - Fetch 事件有时不会触发,但有时会触发(缓存中的 URL)
- c# - 动态生成的 Blazor 页面在页面导航之间仅部分更新
- apache - 如何将所有 www 流量重定向到 vue 项目中的非 www url
- ubuntu - 不包含标记文件时如何使“dpkg-deb”失败?