在java中验证XML文件

时间:2015-11-12 15:25:32

标签: java xml validation dtd

我有以下xml:

<Shapes>
    <Numbers>n-2</Numbers>
    <Triangle.0>
        <Color.0>
            <Red>r-0</Red>
            <Green>g-0</Green>
            <Blue>b-0</Blue>
        </Color.0>
        <FillColor.0>
            <Red>r-0</Red>
            <Green>g-0</Green>
            <Blue>b-0</Blue>
        </FillColor.0>
        <Position.0>
            <X>x-862.0</X>
            <Y>y-333.0</Y>
        </Position.0>
        <propertiesNumber.0>p-4</propertiesNumber.0>
        <properties.0>
            <PointX-b>v-0.0</PointX-b>
            <PointY-b>v-0.0</PointY-b>
            <PointX-a>v-100.0</PointX-a>
            <PointY-a>v-100.0</PointY-a>
        </properties.0>
    </Triangle.0>
</Shapes>

我希望在java中使用DTD验证它。

我写了这个架构:

<!ELEMENT Shapes (Numbers, Triangle.0)>
<!ELEMENT Numbers (#PCDATA)>
<!ELEMENT Triangle.0 (Color.0, FillColor.0, Position.0, propertiesNumber.0,      properties.0)>
<!ELEMENT Color.0 (Red, Green, Blue)>
<!ELEMENT Red (#PCDATA)>
<!ELEMENT Green (#PCDATA)>
<!ELEMENT Blue (#PCDATA)>
<!ELEMENT FillColor.0 (Red, Green, Blue)>
<!ELEMENT Red (#PCDATA)>
<!ELEMENT Green (#PCDATA)>
<!ELEMENT Blue (#PCDATA)>
<!ELEMENT Position.0 (X, Y)>
<!ELEMENT X (#PCDATA)>
<!ELEMENT Y (#PCDATA)>
<!ELEMENT propertiesNumber.0 (#PCDATA)>
<!ELEMENT properties.0 (PointX-b, PointY-b, PointX-a, PointY-a)>
<!ELEMENT PointX-b (#PCDATA)>
<!ELEMENT PointY-b (#PCDATA)>
<!ELEMENT PointX-a (#PCDATA)>
<!ELEMENT PointY-a (#PCDATA)>

但它给了我一个错误,即红色,绿色,蓝色元素不得多次声明。 我该怎么办?

2 个答案:

答案 0 :(得分:2)

这个错误,你解释为“元素红色,绿色,蓝色不能多次声明”是非常清楚的。 在您的DTD中,您不止一次声明了红色,绿色和蓝色元素:

<!ELEMENT Red (#PCDATA)>
<!ELEMENT Green (#PCDATA)>
<!ELEMENT Blue (#PCDATA)>

此部分在您的DTD中出现两次。

删除其中一个事件,你应该摆脱这个错误。

答案 1 :(得分:1)

删除RedGreenBlue的额外声明。它们只需要声明一次。

此外,请勿在DTD末尾添加<!DOCTYPE声明。 (不确定这是不是一个错字。)

第三,您的XML仍然无法验证您的DTD,因为需要Rectangle.1。在dtd中使其成为可选项或将其添加到XML中。如果将其添加到XML中,则还需要在DTD中声明它。