以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  求助:用libxml2解析DTD的代码错误  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=123850)


--  作者:sd02
--  发布时间:3/17/2012 11:34:00 PM

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

一段简单的代码,解析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



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
6,326.172ms