求助:用libxml2解析DTD的代码错误

John-yi 2012-03-19 09:22:29
一段简单的代码,解析UML 1.4 DTD,
代码如下:

#include <libxml/parser.h>

int main(int argc, char** argv)
{
xmlDtdPtr xmiDTD;
xmlChar const * path;

if (argc !=2)
{
printf("syntax: %s <dtdfile>\n", argv[0]);
return 1;
}

path = (xmlChar const *)argv[1];
xmiDTD = xmlParseDTD(0, ((char const *)path));
if(0==xmiDTD) {
printf("error: xmiDTD=0\n");
return 1;
}
else
{
printf("valid\n");
}
return 0;
}

运行时用dtd文件名作参数,出现很多错误,前两个如下:
DTDs/UML-1.4.dtd:188: namespace error : colon are forbidden from entities names 'UML:AggregationKind'
<!ENTITY % UML:AggregationKind '(none|aggregate|composite)'>
^
DTDs/UML-1.4.dtd:189: namespace error : colon are forbidden from entities names 'UML:CallConcurrencyKind'
<!ENTITY % UML:CallConcurrencyKind '(sequential|guarded|concurrent)'>

DTD 文件中出错的片段如下:

<!ELEMENT XMI.reference ANY>
<!ATTLIST XMI.reference %XMI.link.att;>

<!ATTLIST XMI xmlns:UML CDATA #IMPLIED>

<!-- ========= UML:Data_Types ========= -->
<!ENTITY % UML:AggregationKind '(none|aggregate|composite)'> 这是188行
<!ENTITY % UML:CallConcurrencyKind '(sequential|guarded|concurrent)'> 这是189行

难道是最后两行不能有冒号?规范过时了与解析器不匹配?不明白

请高手帮我看看怎么回事,谢谢!

dtd文件的位置在: http://www.omg.org/spec/UML/20010967/01-02-16.dtd
...全文
92 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
John-yi 2012-03-22
  • 打赏
  • 举报
回复
用xmlspy能正确解析,应该是 libxml2有问题。libxml2的应用也比较广泛了,为什么还有这么弱的问题呢?
John-yi 2012-03-21
  • 打赏
  • 举报
回复
这是一个已有软件的代码,用了老版本的格式。一直没解决,急,请求帮助
DTD文件在 http://www.omg.org/spec/UML/20010967/01-02-16.dtd
John-yi 2012-03-21
  • 打赏
  • 举报
回复
唉,没人回答,用libxml2的人太少了
merlinfang 2012-03-19
  • 打赏
  • 举报
回复
dtd呢,怎么问这个版本

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧