XML / Java:在解析标签和属性时精确的线条和字符位置?
我正在尝试找到一种方法来在解析
XML文档时精确确定标记和属性的行号和字符位置.我想这样做,以便我可以准确地向文档无效的XML文档的作者(通过Web界面)报告.
最后,我想将插入符号设置为无效标记或仅在无效属性的开放引用内. (我现在不使用XML Schema,因为属性的确切格式是以一种单独的模式无法验证的方式.我甚至可能希望报告某些属性在属性的值中部分无效.或者类似,在开始和结束标记之间的文本部分.) 我尝试过使用SAX(org.xml.sax)和Locator接口.这可以达到一定程度,但还不够好.它只会在事件发生后报告读取位置;例如,对于startElement(),紧接在open标记结束之后的字符.我不能只减去标签名称的长度,因为open标签中的属性,自动关闭标签和/或换行符会将其丢弃. (并且Locator根本不提供有关属性位置的信息.) 理想情况下,我希望使用基于事件的方法,因为我已经有一个SAX处理程序,它正在构建一个内部类似DOM的表示或进一步处理.但是,我有兴趣了解任何DOM或类似DOM的库,其中包含模型元素的精确位置信息. 有没有人用所需的精确度解决了这个问题,或者任何类似问题?
XML解析器将(并且应该)平滑某些事物,例如额外的空格,因此精确映射回字符流是不可行的.
您应该考虑获取词法分析器或“令牌流生成器”以获得更多细节,换句话说,请转到XML解析器下面的详细级别. 在java中有一些用于编写词法分析器的通用框架. This基于ANTLR 3的页面对lexer vs parser以及section one一些基本的XML Lexer示例进行了很好的概述. 我还想对具有Web界面的用户发表评论,也许您应该考虑使用纯客户端(即javascript)解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |