【问题标题】:Checking if a xml is well formed in java and return all the errors检查xml在java中是否格式正确并返回所有错误
【发布时间】:2015-06-22 13:09:53
【问题描述】:

我需要检查给定的 XML 是否格式正确,例如所有标签是否正确关闭以及 XML 末尾是否没有垃圾。 而且我还需要它来报告 XML 中的所有错误。我需要在 java 中做这个验证

例如

<Hello>
    <title>Today is a wonderful day </title>
    <car>
        <type>SUV
    <car>
        <type>van</type>
    </car>
</Hello>
</type>
</car>

所以上面的xml一定会报出文件末尾有垃圾以及car和type标签在给定行号处没有正确关闭的错误

【问题讨论】:

  • 您应该查看各种可用的 XML 解析器/验证器并尝试自己动手做。如果遇到问题,请回来。
  • @Harmeet,你可以看看this SO post
  • 我使用过 Sax 解析器,但它会报告所有错误。而且我不会尝试针对任何架构或 DTT 进行验证。
  • 我正要发布@Phoenix 刚刚发布的内容:D
  • 我已投票关闭作为@Phoenix 发布的链接的副本。它似乎回答了你的问题。

标签: java xml


【解决方案1】:

基本上你想得到一个 xml 代码的所有错误。

如果没有架构,您正在尝试做的事情有点棘手。考虑这段代码:

<Hello>
    <title>Today is a wonderful day </title>
    <car>
         <type>SUV
    <car>
         <type>van</type>
    </car></type></car>
</Hello>

此代码是有效的 xml 代码,但我想这不是您想要的。因此,尝试使用没有架构的解析器验证代码对您没有好处。

如果您不想使用架构,则可以使用堆栈(记住 布局)并通过在堆栈中添加/删除开始和结束来验证代码标签。

【讨论】:

  • 此代码不是格式良好的 XML 代码。每个打开的标签也必须关闭。在 html 中你有时会看到这些东西,但那也不是格式良好的 xml。
【解决方案2】:

只需读取文件并尝试将其转换为 DOM。如果这没有失败,您将获得一个有效的 XML 文件。

File fXmlFile = new File("/path/to/my.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);

【讨论】:

  • 这会在出现第一个错误时失败。我想要一种方法来报告所有错误。
  • 一般来说这是不可能的。一旦解析器遇到了意想不到的事情,它就会告诉你。它可以尝试继续,但它可能会发现很多错误,一旦第一个问题得到解决,这些错误就会消失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 2021-10-10
相关资源
最近更新 更多