Ios Libxml2拒绝解析XML实体

Ios Libxml2拒绝解析XML实体,ios,svg,libxml2,Ios,Svg,Libxml2,iOS上的libxml断然拒绝解析这个看似有效的XML文件(SVG规范的一部分!): 它抱怨说: Error Domain=1 Code=27 "Entity 'Smile' not defined UserInfo=0x7655730 { lineNumber=26, NSLocalizedDescription=Entity 'Smile' not defined, bonusInfo1=Smile, columnNumber=25 } …并为每个实体返回警告级别错

iOS上的libxml断然拒绝解析这个看似有效的XML文件(SVG规范的一部分!):

它抱怨说:

Error Domain=1 Code=27 "Entity 'Smile' not defined
UserInfo=0x7655730
{
   lineNumber=26,
   NSLocalizedDescription=Entity 'Smile' not defined,
   bonusInfo1=Smile,
   columnNumber=25
}
…并为每个实体返回警告级别错误。似乎没有办法强迫它做文档暗示的事情(默认情况下解析实体)。这里有一个神秘的伪解释(http://www.xmlsoft.org/entities.html)也就是说这很难,没有人应该自己去做。。。但是libxml似乎也不能做到这一点:(

下面是setup结构,以确认我没有为实体解析提供任何覆盖:

static xmlSAXHandler SAXHandler = {
    NULL,                       /* internalSubset */
    NULL,                       /* isStandalone   */
    NULL,                       /* hasInternalSubset */
    NULL,                       /* hasExternalSubset */
    NULL,                       /* resolveEntity */
    NULL,                       /* getEntity */
    NULL,                       /* entityDecl */
    NULL,                       /* notationDecl */
    NULL,                       /* attributeDecl */
    NULL,                       /* elementDecl */
    NULL,                       /* unparsedEntityDecl */
    NULL,                       /* setDocumentLocator */
    NULL,                       /* startDocument */
    NULL,                       /* endDocument */
    NULL,                       /* startElement*/
    NULL,                       /* endElement */
    NULL,                       /* reference */
    charactersFoundSAX,         /* characters */
    NULL,                       /* ignorableWhitespace */
    NULL,                       /* processingInstruction */
    NULL,                       /* comment */
    NULL,                       /* warning */
    errorEncounteredSAX,        /* error */
    NULL,                       /* fatalError //: unused error() get all the errors */
    NULL,                       /* getParameterEntity */
    cDataFoundSAX,              /* cdataBlock */
    NULL,                       /* externalSubset */
    XML_SAX2_MAGIC,
    NULL,
    startElementSAX,            /* startElementNs */
    endElementSAX,              /* endElementNs */
    structuredError,                       /* serror */
};

这是libxml中的一个巨大缺陷,似乎已经存在了一段时间

医生(http://www.xmlsoft.org/html/libxml-parser.html#xmlCreatePushParserCtxt)说:

xmlParserCtxtPtr    xmlCreatePushParserCtxt (xmlSAXHandlerPtr sax, 
                         void * user_data, 
                         const char * chunk, 
                         int size, 
                         const char * filename)
sax:    a SAX handler
user_data:  The user data returned on SAX callbacks
但他们应该说:

sax:    a SAX handler
user_data:  YOU MUST NOT USE THIS BECAUSE LIBXML IS BADLY
 BROKEN INTERNALLY. NEVER PASS ANYTHING EXCEPT NULL TO
 THIS PARAMETER. ENTITIES WILL NEVER WORK IF YOU PASS
 ANYTHING EXCEPT NULL.
i、 您不能使用“userdata”指针,而必须编写自己的静态变量(在某个地方),并使用它们来跟踪状态,因为libxml不允许您跟踪状态本身

(我最终在一个邮件列表中找到了一个参考,有人问为什么这会被破坏,并要求用警告更新文档)


顺便说一句,这解释了我在使用libxml的其他iOS项目上看到的一些与实体相关的问题。在这个单一的bug/糟糕的文档上浪费了很多天:(.叹气。

libxml中的一个巨大bug似乎已经存在了一段时间

医生(http://www.xmlsoft.org/html/libxml-parser.html#xmlCreatePushParserCtxt)说:

xmlParserCtxtPtr    xmlCreatePushParserCtxt (xmlSAXHandlerPtr sax, 
                         void * user_data, 
                         const char * chunk, 
                         int size, 
                         const char * filename)
sax:    a SAX handler
user_data:  The user data returned on SAX callbacks
但他们应该说:

sax:    a SAX handler
user_data:  YOU MUST NOT USE THIS BECAUSE LIBXML IS BADLY
 BROKEN INTERNALLY. NEVER PASS ANYTHING EXCEPT NULL TO
 THIS PARAMETER. ENTITIES WILL NEVER WORK IF YOU PASS
 ANYTHING EXCEPT NULL.
i、 您不能使用“userdata”指针,而必须编写自己的静态变量(在某个地方),并使用它们来跟踪状态,因为libxml不允许您跟踪状态本身

(我最终在一个邮件列表中找到了一个参考,有人问为什么这会被破坏,并要求用警告更新文档)

顺便说一句,这解释了我在其他使用libxml的iOS项目上看到的一些与实体相关的问题