2010-04-05 51 views
2

我有一个XML文档,它处于FO转换后的状态,我需要从中提取一些信息。在这种情况下,我需要提取两个代表pageWidth和pageHeight的标签,而在后一种情况下,我需要从特定标签中提取页面高度和页面宽度参数(我忘记了哪个标签不在我的头顶)。从XML文件中检索两段数据的最佳方式是什么?

我在寻找的是一种高效/易于维护的方法来抓住这两个元素。我只想一次性读取文档来获取我需要的两件事情。

我最初开始写一些使用BufferedReader + FileReader的东西,但后来我在做字符串搜索,当标签跨越多行时,它会变得杂乱无章。然后我看了DOMParser,这看起来很理想,但我不想将整个文件读入内存,如果我可以帮助它,因为文件可能很大,我正在寻找的标签将几乎总是接近文件的顶部。然后,我看着SAXParser,但这似乎是我想要完成的一大堆复杂的矫枉过正。

有人有什么建议吗?还是简单的实现,可以实现我的目标?谢谢。

编辑:我忘记提及,由于我有各种限制,无论我使用什么,都必须“内置”到核心Java,我无法使用和/或下载任何第三方XML工具。

回答

4

尽管XPath非常适合查询XML数据,但我并不知道Java的良好且快速的XPath实现(它们都至少使用DOM模型)。

我会建议你坚持使用StAX。它甚至对于大文件速度极快,它的游标API是相当简单:

XMLInputFactory f = XMLInputFactory.newInstance(); 
XMLStreamReader r = f.createXMLStreamReader("my.xml"); 
try { 
    while (r.hasNext()) { 
    r.next(); 
    . . . 
    } 
} finally { 
    r.close() 
} 

有关详情,请StAX tutorialXMLStreamReader javadocs

+0

+1 StAX的... – Bozho 2010-04-05 19:30:07

+0

这似乎是几乎正是我一直在寻找。将进一步调查。 – Morinar 2010-04-05 19:36:37

+0

这完美地根据我想要它做的事情。感谢您的输入! – Morinar 2010-04-05 21:11:28

1

您可以使用XPath来搜索您的标签。 Here是关于形成XPath表达式的教程。而here是一篇关于在XPath中使用Java的文章。


易于使用的解析器(dom,sax)是dom4j。这比使用内置的SAXParser更容易使用。

0

尝试"XMLDog"

它使用SAX评估的XPath

相关问题