XML - 外部DTD:元素类型的内容必须与

时间:2017-08-21 08:30:43

标签: xml dtd xml-dtd

我是XML和学习者的新手!使用XSD的XML比DTD更舒服!我正面临着解决DTD扩展的错误。

问题: 一个人有家属,家属可以是配偶和子女,也可以是配偶。一个人可以有一个以上的孩子。生成XML和DTD

从那个架构我能写DTD!将“ person.dtd ”命名为将链接到XML文件的外部DTD。

[person.dtd] [2] 和XML作为。, [person.xml] [1]

我面临的错误是!

  

错误:公共ID:null系统ID:   file:/home/p11422/person_given.xml行号:11列   number:12消息:元素类型“配偶”的内容必须匹配   “(spouse_name,spouse_age)”。

任何人都请帮我摆脱这个错误! 这是person.dtd - >

 <?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT person (name , age , address , dependents)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT dependents (spouse,children?)>
<!ELEMENT spouse (spouse_name , spouse_age)>
<!ELEMENT spouse_name (#PCDATA)>
<!ELEMENT spouse_age (#PCDATA)>
<!ELEMENT children (child+)>
<!ELEMENT child (cname , gender , cage)>
<!ELEMENT cname (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
<!ELEMENT cage (#PCDATA)>

这是person.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person SYSTEM "person.dtd">
<person>
   <name>Deepak</name>
   <age>28</age>
   <address>Vijayawada</address>
   <dependents>
     <spouse>
         <spouse_name>padma</spouse_name>
         <spouse_age>26</spouse_age>
     </spouse>
    </dependents>
</person>

2 个答案:

答案 0 :(得分:1)

专业提示:如果您将实际代码放在问题中而不仅仅是图像中,那么帮助调试问题要容易得多。

由于我在手机上并且无法轻易重现这个问题,我会做出最好的猜测。

我相信您遇到的问题是dependents元素的内容模型是非确定性的。换句话说,它含糊不清;

,解析器无法确定哪个spouse正在匹配。

尝试更改您的声明:

<!ELEMENT dependents (spouse|(spouse,children))>

为:

<!ELEMENT dependents (spouse,children?)>

这意味着只有一个spouse后跟零或一个children

这似乎与你得到的错误不符,但这是我唯一看错的地方。 spouse的声明/用法似乎没问题。

答案 1 :(得分:0)

猜测,验证器读取的输入不是您认为的输入。您显示的输入对您显示的DTD有效,xmllint和RXP都不会发出有关配偶的任何错误消息。元件。 (两者都抱怨DTD开头的空白。)