【问题标题】:Opening XML file with SAX使用 SAX 打开 XML 文件
【发布时间】:2011-10-24 11:54:13
【问题描述】:

我想打开一个本地 xml 文件来解析它。 所以我有这条线:saxReader.parse("file.xml"); 我有这个错误open failed: ENOENT (No such file or directory) 所以我尝试通过提供完整路径来解决它,例如 C:/.../file.xml 但是也有同样的问题。

我应该把file.xml放在项目哪里解决问题?

谢谢

【问题讨论】:

  • saxReaderjavax.xml.parsers.SAXParser 的实例吗?你怎么称呼parse?没有这样一种带有一个参数的方法,您还必须提供一个处理程序。为文件传递字符串时,该字符串必须是文件的 URI。了解正确形式的 URI 语法。我认为在通过常规方式找到文件后,使用采用FileInputStreamInputSource 的方法的变体会更好。
  • 正如@G_H 已经指出的,请提供更多代码(以及异常堆栈跟踪)。
  • saxReader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); simpleContentHandler = new SimpleContentHandler(); saxReader.setContentHandler(simpleContentHandler); saxReader.parse("file.xml"); 这是我的代码
  • 啊,这是XMLReader。请参阅下面的答案。

标签: java xml sax


【解决方案1】:

您使用的是XMLReader。你可以使用它,但在 Java 中你可能最好使用 javax.xml.parsers 包中的东西。使用SAXParserFactory.newInstance() 创建一个SAXParserFactory,对其进行配置,然后在其上调用newSAXParser()。如果您绝对必须使用该实现,请仅提供与您一样的类名。否则,最好让默认查找机制来处理它。至于实际问题,学习URI syntax for files并使用它,或者获取File实例或InputStreamInputSource并将其传递给阅读器或解析器。

【讨论】:

  • 现在我正在使用 SAXParserFactory 但我有同样的问题。我尝试使用如下路径:file:///C:/Java/file.xml 我尝试使用InputSource("file:///C:/Java/file.xml")
  • 嗯,不过看起来还不错。也许尝试使用小写的c:。否则,我建议您创建一个带有路径 C:/Java/file.xmlFile 对象并使用该对象。如果 XML 源始终在本地文件系统上,这应该可以工作。
  • 现在我正在这样做:String xmlUri = "file:///g:/Java/Guigui/src/file.xml"; InputSource inputSource = new InputSource(new FileInputStream( new File(xmlUri))); inputSource.setSystemId(xmlUri); xmlReader.parse(inputSource); 但总是打开失败 10-24 13:13:55.350: V/debug(2014): IOException: /file:/g:/ Java/Guigui/src/citation_jour.xml:打开失败:ENOENT(没有这样的文件或目录)
  • 只需执行File f = new File("C:/Java/file.xml");(或您正在使用的任何路径),然后将SAXParser 方法parse(f, handler) 与您的处理程序一起使用。解析器通常应该能够检测编码。尝试在这些东西中采用最简单的方法。
  • 问题依然存在。我忘了说我正在开发Android SDK,也许有问题的链接。
【解决方案2】:

如果您将字符串传递给 XMLReader.parse(),它应该是一个完全解析(即绝对)的 URL。 file.xml 不是绝对 URL(它是相对的)。 c:\dir\dir\file.xml 也不是绝对 URL - 它是 Windows 文件名。如果您不了解 URL 并且不习惯使用它们,则传递 Java 文件会更简单:parse(new InputSource(new File('file.xml')))

【讨论】:

  • 已经说了一段时间了。但显然它是Android SDK。我从来没有开发过它,所以我不会猜测你可以在那里做什么,不能做什么。
猜你喜欢
  • 2017-12-02
  • 1970-01-01
  • 2013-06-30
  • 2020-03-28
  • 2014-06-26
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 2011-04-13
相关资源
最近更新 更多