Java SAX 解析。获取当前正在解析的 xml 文件中的文件行

标签 java xml parsing sax

在解析 XML 文档时,您可以设置一个定位器,当不同的事件触发时,定位器会告诉您当前所在的行号和列号。

我想知道,我怎样才能获取该行的内容,我是否必须传递文件,自己将其读入数组,这不是已经由 sax 处理程序完成了吗,因为它让我可以访问定位器,还必须能够访问处理程序当前正在使用的文件。

谢谢!

:::::::::::::::::::::::::::编辑:::::::::::::::::::

我正在尝试回显 xml 文件并希望包含 doctype 声明:

<!DOCTYPE employee [<!ELEMENT employee (Name, Dept, Title)>
<!ELEMENT Name (#PCDATA)> 
<!ELEMENT Dept (#PCDATA)>
<!ELEMENT Title (#PCDATA)> ]>

有一个

public void startDTD(String name, String publicId, String systemId);

和一个

public void endDTD();

您可以在其中使用定位器获取当前行和列,并从文件中读取。

SAX 解析器不会在某些情况下触发事件,也不会提供有关读取的 XML 文件中内容的足够信息。

最佳答案

首先,您确定解析器不会通过更专业的处理程序之一提供您需要的信息,例如词法处理程序?

如果您确实需要访问原始数据,请编写位于 SAX 解析器和“真实”Reader 或 InputStream 之间的 Reader 或 InputStream 实现,将所有 read() 请求传递给底层读取器,但跟踪从文件中读取的最后几行。然后,该过滤器可以响应请求以提供第 N 行的内容,因为它已保留了数据。但是,我不确定如何使这项工作满足您的实际要求,因为您正在查找的信息可以分布在任意数量的行上。

关于Java SAX 解析。获取当前正在解析的 xml 文件中的文件行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8486169/

相关文章:

java - 特定正则表达式如何解析嵌套 html 标签中的内容,Java

java - 需要根据分隔符分割字符串,但它们被分组

java - 如何将具有列表属性的对象列表转换为一个包含所有列表属性项的列表

Python 使用通配符在 XML 中查找标签

.net - VB中日期的下一行

c# - 在 .NET Framework 4.0 中使用 SHA256 签名 XML 算法

android - 膨胀类 androidx.core.widget.NestedScrollView 时出错

当我将内容从文件转换到我的对象时,java抛出java.lang.ClassCastException

java - 如何在执行 'Unsupported class file major version 55' 时修复 'org.apache.spark.sql.DataSet.collectAsList()'

java - 使用 ClassLoader 和 Class.forName 加载类的区别