【问题标题】:How do i declare elements with the same name(on XML) on a DTD?如何在 DTD 上声明具有相同名称(在 XML 上)的元素?
【发布时间】:2015-12-28 09:37:30
【问题描述】:

我是 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>

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

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

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

【问题讨论】:

    标签: xml dtd


    【解决方案1】:

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

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

    其中+ 声明命名元素将在块中出现一次或多次,* 声明命名元素将出现零次或多次。如果你没有任何量词,那么命名元素只会出现一次。

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

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

    【讨论】:

    • 是的,我忘了添加 vip 的开始标签,这让我很笨拙。但我现在明白其中的逻辑了。谢谢你解释清楚!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多