Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';从XML文件中检索两段数据的最佳方法是什么?_Java_Xml_Xml Parsing - Fatal编程技术网

Java 什么';从XML文件中检索两段数据的最佳方法是什么?

Java 什么';从XML文件中检索两段数据的最佳方法是什么?,java,xml,xml-parsing,Java,Xml,Xml Parsing,我有一个XML文档,它处于FO转换前或转换后的状态,我需要从中提取一些信息。在前一种情况下,我需要拉出两个表示pageWidth和pageHeight的标记,而在后一种情况下,我需要从特定的标记中提取pageHeight和pageWidth参数(我忘了哪一个是我头顶上的) 我要寻找的是一种高效/易于维护的方法来获取这两个元素。我只想读一次文档,获取我需要的两样东西 我最初开始编写一些将使用BufferedReader+FileReader的东西,但后来我在进行字符串搜索,当标记跨越多行时,它会变

我有一个XML文档,它处于FO转换前或转换后的状态,我需要从中提取一些信息。在前一种情况下,我需要拉出两个表示pageWidth和pageHeight的标记,而在后一种情况下,我需要从特定的标记中提取pageHeight和pageWidth参数(我忘了哪一个是我头顶上的)

我要寻找的是一种高效/易于维护的方法来获取这两个元素。我只想读一次文档,获取我需要的两样东西

我最初开始编写一些将使用
BufferedReader
+
FileReader
的东西,但后来我在进行字符串搜索,当标记跨越多行时,它会变得混乱。然后我看了看
DOMParser
,它看起来很理想,但是如果我能帮上忙的话,我不想把整个文件读入内存,因为文件可能很大,我要查找的标记几乎总是接近文件的顶部。然后我研究了
SAXParser
,但对于我试图完成的工作来说,这似乎是一大堆复杂的过份工作

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

编辑:我忘了提到,由于各种限制,我使用的任何东西都必须是核心Java的“内置”,在核心Java中,我不能使用和/或下载任何第三方XML工具。

您可以使用它来搜索标记。是一个关于形成XPath表达式的教程。这是一篇关于在Java中使用XPath的文章



提供了一个易于使用的解析器(dom、sax)。它比内置的SAXParser更容易使用。

虽然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()
}
有关更多信息,请咨询和。

试试看


这使用sax来评估XPath

,这似乎正是我想要的。我将进一步调查。这完全符合我的要求。谢谢你的意见@Morinar-除了接受答案之外,我建议投票表决