如何在SAX Parser中获取文件名?

时间:2017-08-29 05:52:38

标签: java xml sax

有没有办法在SAX解析器处理程序类中获取文件名? 我要求在文本文件中写入文件名和标签内容。

请帮忙。

编辑:我需要这个

saxParser.parse( “Input.xml中”,saxHandler); 在saxHandler中,当我得到'id'标签时,读取值并将值与文件名一起存储。它可以是地图或物体。

3 个答案:

答案 0 :(得分:2)

SAX解析器通常在调用任何其他事件处理方法之前调用ContentHandler.setDocumentLocator()。提供的Locator可用于获取SystemId,如果要从文件解析,则SystemId通常会以URI形式提供源文件名。

一些警告:

  • 鼓励SAX解析器调用此方法,但没有义务这样做。

  • 在某些情况下,例如如果从FileInputStream解析,解析器可能不知道源文件名(以及因此SystemId)(实际上,源XML不一定来自文件)。

  • 如果源文档包含多个外部实体,则SystemId可以在解析过程中更改。

答案 1 :(得分:0)

我是来这里寻找答案的。我怀疑迈克尔·凯比我对这件事了解得多,但是我无法从他的帖子中找到一种方法,所以我将发布对我有用的方法(Python 3)。在元素处理程序的startDocument方法中,我具有以下内容:    self.sInFName =路径(self._locator.getSystemID())。name (这使用PathLib的Path方法,即在代码顶部附近执行“从pathlib import Path”。)然后,我可以从处理程序内部的任何位置引用要解析的文件的文件名。 (如果需要文件的完整路径,请省略.name)

正如其他人指出的那样,这仅在您实际解析文件时才有效。如果您正在从stdin中读取内容或其他内容,则getSystemID()将返回文件路径以外的其他内容(我不知道是什么)。

答案 2 :(得分:0)

这在Java中对我有用:(感谢Michael Kay提供指导)

在fileHandler中:

@Override
public void setDocumentLocator( Locator locator) {
    String systemId = locator.getSystemId();
    Path p = Paths.get(URI.create(systemId));
    String fileName = p.getFileName().toString();
    System.out.println(fileName);
}