我有一个使用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个字节。
我知道我可能可以使用Java的字符串函数来提取相关数据,但是是否可以使用解析器甚至XPath来实现此目的?或者它们都希望在解析XML之前将XML文档作为格式良好的文档进行解析?
Parser.parseBodyFragment(fragment, "").getElementsByTag("author")
这样的操作。 - Vlad