xml - 如何在 DTD 上声明具有相同名称(在 XML 上)的元素?

标签 xml dtd

我是 XML 和 DTD 的初学者,但我无法弄清楚一件事。 如何在 DTD 上声明具有相同名称(在 XML 上)的元素?这是我的 XML 文件,您可以看看我的意思。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE family SYSTEM "family.dtd">
<family> 
  <Name>
    <FirstName>George</FirstName>
    <LastName>Costanza</LastName>
  </Name>
  <Name>
    <FirstName>Jerry</FirstName>
    <FirstName>Allen</FirstName>
    <LastName>Seinfeld</LastName>
    <Phone>0522-112233</Phone>
  </Name>
  <Name>
    <FirstName>Elaine</FirstName>
    <LastName>Benes</LastName>
    <Phone>0522-998877</Phone>
    <Phone>070-100101</Phone>
    <vip></vip>
  </Name>
</family>

正如您所看到的,元素“Name”被使用了多次。我在我的 DTD 上尝试了这个,但它当然说元素名称已经被声明。

<!ELEMENT family (Name+)>
<!ELEMENT Name (FirstName, LastName)>
<!ELEMENT FirstName(#PCDATA)>
<!ELEMENT LastName(#PCDATA)>
<!ELEMENT Name (FirstName, FirstName, LastName, Phone)>

那么我该如何解决这个问题呢?我希望我已经说清楚了。

最佳答案

您的 DTD 对 Name 有不同的定义,这没有帮助。您可能希望其中一些能够出现零次或多次,例如

<!ELEMENT family (Name+)>
<!ELEMENT Name (FirstName+, LastName, Phone*)>
<!ELEMENT FirstName (#PCDATA)>
<!ELEMENT LastName (#PCDATA)>

其中 + 声明指定元素将在 block 中出现一次或多次,* 声明指定元素将出现零次或多次。如果没有任何量词,则指定元素将仅出现一次。

另请注意,某些元素名称和内容类型之间缺少空格,例如 FirstName(#PCDATA)

最后,vip的开始标签在哪里?

关于xml - 如何在 DTD 上声明具有相同名称(在 XML 上)的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34486196/

相关文章:

xml - 如果 DTD 链接无处可去,会发生什么情况?

java - 在 Java 中解析此 XML 的最简单方法?

xml - 如何在 DTD 中声明可以省略的具有默认值的属性?

html - 处理 CDATA 元素中的 HTML 实体

java - MyBatis 中的 iBatis <isParameterPresent> 标签是什么?

xml - 使用 DTD,是否可以声明一个允许任何 XML 内容的元素?

python - 如何在 Python 中针对 DTD 文件验证 xml

xml - 在哪里可以找到有关如何编写 XML DTD 的良好文档?

python - 使用 Python 解析大型 xml 文件 - etree.parse 错误

java - Jsoup, '&gt;' 的问题相关转换