2017-08-21 80 views
1

我是XML和学习者的新手!带XSD的XML比DTD更舒服!即时消息面临错误解决DTD扩展。XML - 外部DTD:元素类型的内容必须匹配

问题: 一个人会有家属,家属可以是配偶,子女或只有配偶。一个人可以有超过1个孩子。生成XML和DTD

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

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

我面对的错误就是这样!

Error: Public ID: null System ID: file:/home/p11422/person_given.xml Line number: 11 Column number: 12 Message: The content of element type "spouse" must match "(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> 
+1

请提供输入(DTD,XML)作为有问题的代码,而不是链接的插图。谢谢。 – potame

+0

谢谢@potame回复!我已经添加了上面的代码片段!请看一看 ! :) –

回答

1

临提示:这是很容易帮助调试一个问题,如果你把实际的代码中的问题,而不是只图片。

由于我在我的手机上,无法轻松重现问题,所以我会尽量猜测。

我相信你遇到的问题是dependents元素的内容模型是非确定性的。换句话说,它是模棱两可的;解析器无法确定哪个spouse正在被匹配而没有向前看。

尝试从改变你的声明:

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

到:

<!ELEMENT dependents (spouse,children?)> 

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

这似乎不符合你所得到的错误,但这是我看到错误的唯一的东西。 spouse的声明/使用似乎没有问题。

+0

谢谢@Daniel Haley,我更改了声明并更新了我的问题!但我得到同样的错误!我已经添加了DTD和XML代码块,请看看。谢谢你,先生 –

0

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

相关问题