首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ANTLR解析xml文档

如何使用ANTLR解析xml文档
EN

Stack Overflow用户
提问于 2009-11-18 21:51:06
回答 2查看 4K关注 0票数 0

谁能告诉我如何使用ANTLR工具(在java中)创建我们自己的xml文档语法,以及如何使用ANTLR工具(在java中)解析这些文档?

EN

回答 2

Stack Overflow用户

发布于 2009-11-19 05:03:13

查看ANTXR,这是我的ANTLR派生,它在语法本身中支持XML标记。您可以使用SAX或XMLPull作为前端。(注意:它基于ANTLR 2.x)

http://javadude.com/tools/antxr/index.html

简短的示例:

代码语言:javascript
复制
header {
package com.javadude.antlr.sample.xml;

import java.util.List;
import java.util.ArrayList;
}

class PeopleParser extends Parser;


document returns [List results = null]
  : results=<people> EOF
  ;

<people> returns [List results = new ArrayList()]
  { Person p; }
  : ( p=<person>  { results.add(p); }   )*
  ;

<person> returns [Person p = new Person()]
  {
    String first, last;
    p.setId(@id);  // attributes are read using "@xxxx"
  }
  : ( first=<firstName>  { p.setFirstName(first); }
    | last=<lastName>    { p.setLastName(last);   }
    )*
  ;

<firstName> returns [String value = null]
  : pcdata:PCDATA { value = pcdata.getText(); }
  ;

<lastName> returns [String value = null]
  : pcdata:PCDATA { value = pcdata.getText(); }
  ;
票数 2
EN

Stack Overflow用户

发布于 2009-11-20 07:29:27

如果您想要编写一个完全符合(甚至是非验证)的XML解析器,则必须阅读W3C规范(http://www.w3.org/TR/REC-xml/)。您将需要处理内部和外部DTD子集、参数实体和一般实体。这将是一项主要任务,即使使用ANTLR也是如此。您需要能够解析URL并处理名称空间URL。还有更多。

我怀疑您只希望解析一个子集(尽管我不认为为标准编写不符合标准的解析器是个好主意)。在这种情况下,第一件事是为您的子集编写EBNF。那么它应该是相当简单的:-)

编辑XML以清楚地表明:任何不符合完整规范的都不是XML。您谈到为XML创建“自己的语法”,但是已经有一个定义好的XML语法,不能修改。如果你想创建你自己的语法“像XML”,你可以,但是任何认为它实际上是XML的人都会失望,因为有许多你不支持的XML构造(或者将以不同的方式支持)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1756127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档