验证 java 中的 XML 文件
Validate XML file in java
我有以下 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)>
但它给我的错误是元素红、绿、蓝不能被声明多次。
我能做什么?
您解释为 "elements Red, Green, Blue must not be declared more than once" 的错误非常清楚。
在您的 DTD 中,您不止一次声明了元素 Red、Green 和 Blue:
<!ELEMENT Red (#PCDATA)>
<!ELEMENT Green (#PCDATA)>
<!ELEMENT Blue (#PCDATA)>
此部分在您的 DTD 中出现两次。
删除这些事件中的一个,您应该摆脱这个错误。
删除 Red
、Green
和 Blue
的额外声明。它们只需要声明一次。
此外,不要在 DTD 末尾包含 <!DOCTYPE
声明。 (不确定这是不是打字错误。)
第三,您的 XML 仍然无法根据您的 DTD 进行验证,因为 Rectangle.1
是必需的。要么在 dtd 中将其设为可选,要么将其添加到您的 XML。如果您将它添加到您的 XML,您还需要在您的 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)>
但它给我的错误是元素红、绿、蓝不能被声明多次。 我能做什么?
您解释为 "elements Red, Green, Blue must not be declared more than once" 的错误非常清楚。 在您的 DTD 中,您不止一次声明了元素 Red、Green 和 Blue:
<!ELEMENT Red (#PCDATA)>
<!ELEMENT Green (#PCDATA)>
<!ELEMENT Blue (#PCDATA)>
此部分在您的 DTD 中出现两次。
删除这些事件中的一个,您应该摆脱这个错误。
删除 Red
、Green
和 Blue
的额外声明。它们只需要声明一次。
此外,不要在 DTD 末尾包含 <!DOCTYPE
声明。 (不确定这是不是打字错误。)
第三,您的 XML 仍然无法根据您的 DTD 进行验证,因为 Rectangle.1
是必需的。要么在 dtd 中将其设为可选,要么将其添加到您的 XML。如果您将它添加到您的 XML,您还需要在您的 DTD 中声明它。