【问题标题】:Validate XML file in java在java中验证XML文件
【发布时间】:2015-11-12 15:25:31
【问题描述】:

我有以下 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)>

但是它给了我一个错误,元素 Red、Green、Blue 不能被多次声明。 我该怎么办?

【问题讨论】:

  • 这与Java无关。无论是不是 Java,任何 XML 验证器都会出现相同的错误,因为您的 DTD 中有错误。

标签: java xml validation dtd


【解决方案1】:

您将错误解释为“不得多次声明红色、绿色、蓝色元素”,这一错误非常明显。 在您的 DTD 中,您已多次声明元素 Red、Green 和 Blue:

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

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

删除这些事件之一,您应该摆脱此错误。

【讨论】:

    【解决方案2】:

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

    另外,不要在 DTD 末尾包含 &lt;!DOCTYPE 声明。 (不知道是不是笔误。)

    第三,您的 XML 仍然无法针对您的 DTD 进行验证,因为需要 Rectangle.1。要么在 dtd 中将其设为可选,要么将其添加到您的 XML 中。如果将它添加到 XML 中,还需要在 DTD 中声明它。

    【讨论】:

    • 很抱歉,帖子中有一些错误。我编辑了它。
    • 感谢您的第一次解释。
    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 2011-09-13
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多