繁体   English   中英

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

[英]How to get file name in SAX Parser?

有没有一种方法可以在SAX解析器处理程序类中获取文件名? 我需要在文本文件中写入文件名以及标签内容。

请帮忙。

编辑:我需要这个

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

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

一些警告:

  • 鼓励SAX解析器调用此方法,但不必这样做。

  • 在某些情况下,例如,如果从FileInputStream进行解析,则解析器可能无法识别源文件名(因此也无法识别SystemId)(实际上,源XML不一定来自文件)。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM