解析格式错误/不完整/无效的XML文件

齐齐:

我有一个使用JDOM和xpath解析XML文件的过程,如下所示:

private static SAXBuilder   builder         =   null;
private static Document     doc         =   null; 
private static XPath        xpathInstance       =   null;

builder = new SAXBuilder();
Text list = null;

try {
    doc = builder.build(new StringReader(xmldocument));

} catch (JDOMException e) {
            throw new Exception(e);
} 



try {
    xpathInstance = XPath.newInstance("//book[author='Neal Stephenson']/title/text()");
    list = (Text) xpathInstance.selectSingleNode(doc);
} catch (JDOMException e) {
    throw new Exception(e);
}

以上工作正常。xpath表达式存储在属性文件中,因此可以随时更改它们。现在,我必须处理更多来自旧系统的xml文件,该旧系统将仅以4000字节的块发送xml文件。现有处理读取4000字节的块并将其存储在Oracle数据库中,每个块作为数据库中的一行(对遗留系统进行任何更改或将这些块存储为数据库中的行的处理都是不可能的) 。

通过提取与特定xml文档相关的所有行并将其合并,然后使用现有处理(如上所示)来解析xml文档,可以构建完整的有效XML文档。

事实是,我需要从XML文档提取的数据将始终位于前4000个字节上。这部分课程不是有效的XML文档,因为它是不完整的,但将包含我需要的所有数据。我无法解析一个块,因为JDOM构建器将拒绝它。

我想知道是否可以解析格式错误的XML块而不必合并所有部分(可能会达到很多)以获取有效的XML文档。这将节省我数次前往数据库的旅程,以检查是否有块可用,而我不必为了能够使用前4000个字节而合并100个块。

我知道我可能可以使用java的字符串函数来提取相关数据,但是使用解析器甚至xpath可能吗?还是他们都希望xml文档在解析之前是格式良好的文档?

弗拉德:

您可以尝试使用JSoup解析无效的XML。根据定义,XML应该格式正确,否则无效并且不应使用。

更新 -示例:

public static void main(String[] args) {
    for (Node node : Parser.parseFragment("<test><author name=\"Vlad\"><book name=\"SO\"/>" ,
            new Element(Tag.valueOf("p"), ""),
            "")) {
        print(node, 0);
    }
}

public static void print(Node node, int offset) {
    for (int i = 0; i < offset; i++) {
        System.out.print(" ");
    }
    System.out.print(node.nodeName());
    for (Attribute attribute: node.attributes()) {
        System.out.print(", ");
        System.out.print(attribute.getKey() + "=" + attribute.getValue());
    }
    System.out.println();
    for (Node child : node.childNodes()) {
        print(child, offset + 4);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章