在解析 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/