【问题标题】:java DocumentBuilder with DTD validation validates invalid XML带有 DTD 验证的 java DocumentBuilder 验证无效的 XML
【发布时间】:2015-12-08 23:22:18
【问题描述】:

在 DTD 验证下,我得到了一个简单的 XML 文档,其结构如下:

people.xml

<?xml version='1.0' encoding='ISO-8859-15' ?>

<!DOCTYPE people SYSTEM "people.dtd">

<people>
    <person dni="1234345F" >
        <name>pepe</name>
        Description for pepe
        <age>12</age>
        <subject>maths</subject>
        <subject>history</subject>
    </person>
    <person dni="12343sdfF" >
        Description for marcos
        <name>marcos</name>
        <age>12</age>
        <subject>music</subject>
        <subject>Spanish</subject>
    </person>
    <person dni="345634345F" >
        <name>JL</name>
        <age>25</age>
        <subject>science</subject>
        <subject>maths</subject>
        Description for JL
    </person>
</people>

如您所见,每个人的描述文本节点的位置在验证时是未知的。我已经写了这个 DTD:

people.dtd

<!ELEMENT people (person+)>
<!ELEMENT person (name|age|subject+|#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ATTLIST person dni CDATA #REQUIRED>

我已经尝试了这一行 (name|age|subject+|#PCDATA) 的几乎所有组合,但我仍然无法将它与 xml 文档匹配。

【问题讨论】:

  • 对不起,错误的标题!我会编辑标题,但我看不到任何链接。
  • 要编辑标题或问题文本,请点击问题下方的“编辑”。

标签: xml validation dtd


【解决方案1】:

混合内容时不能指定顺序 (http://www.w3.org/TR/xml/#sec-mixed-content)。

你必须像这样声明person

<!ELEMENT person (#PCDATA|name|age|subject)*>

【讨论】:

  • 如果给定的 ELEMENT 人没有主题会发生什么?我需要检查其中至少有一个,或者更多。
  • @sonirico - 我建议添加一个描述元素,以便您可以指定顺序和出现。
猜你喜欢
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 2010-12-07
  • 2014-09-04
  • 2012-08-21
  • 2012-09-21
  • 1970-01-01
相关资源
最近更新 更多