SimpleXML использует libxml под ним, но я не уверен, может ли он разрешать узлам узлов использовать локальный кеш.
Я пробовал и анализировал CentOS и систему Ubuntu, установил необходимые пакеты, получил /etc/xml/catalog
aka
<?xml version="1.0"?> <!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/rele> <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"> ... (docbook here) <delegatePublic publicIdStartString="-//W3C//DTD XHTML 1.0" catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/> <delegateSystem systemIdStartString="http://www.w3.org/TR/xhtml1/DTD" catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/> <delegateURI uriStartString="http://www.w3.org/TR/xhtml1/DTD" catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/> </catalog>
и /usr/share/sgml/xhtml1/xmlcatalog
aka
<?xml version="1.0"?> <!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/rele> <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"> ... (strict, traditional, frameset here) <rewriteSystem systemIdStartString="http://www.w3.org/TR/xhtml1/DTD" rewritePrefix="xhtml1-20020801/DTD"/> <rewriteURI uriStartString="http://www.w3.org/TR/xhtml1/DTD" rewritePrefix="xhtml1-20020801/DTD"/> </catalog>
В /usr/share/sgml/xhtml1/xhtml1-20020801/DTD/
мы находим
... (strict, traditional, frameset here) -rwxr-xr-x 1 root root 11775 Jan 6 2007 xhtml-lat1.ent -rwxr-xr-x 1 root root 4131 Jan 6 2007 xhtml-special.ent -rwxr-xr-x 1 root root 13848 Jan 6 2007 xhtml-symbol.ent
но XML-String занимает много времени, чтобы анализировать simplexml_load_string($xml)
или $x = XMLReader::xml($xml)
и $x->next() + $x->readString()
если это содержит
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE rootNode [ <!ENTITY % HTMLspecial PUBLIC "-//W3C//ENTITIES Special for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"> %HTMLspecial; <!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"> %HTMLlat1; ]> <rootNode> ... </rootNode>
когда-то он терпит неудачу из-за таймаута.
С другой стороны, разрешение xmlcatalog
отлично работает:
[root@... sal]# xmlcatalog --shell > debug > resolve "-//W3C//ENTITIES Special for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent" Resolve: pubID -//W3C//ENTITIES Special for XHTML//EN sysID http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent 0 Parsing catalog file:///etc/xml/catalog file:///etc/xml/catalog added to file hash file:///usr/share/sgml/xhtml1/xmlcatalog not found in file hash 0 Parsing catalog file:///usr/share/sgml/xhtml1/xmlcatalog file:///usr/share/sgml/xhtml1/xmlcatalog added to file hash Trying system delegate file:///usr/share/sgml/xhtml1/xmlcatalog Using rewriting rule http://www.w3.org/TR/xhtml1/DTD file:///usr/share/sgml/xhtml1/xhtml1-20020801/DTD/xhtml-special.ent >
xmllint
анализирует строку как файл в мгновение LIBXML_NOENT
, отключение обработчика объекта bei LIBXML_NOENT
работает быстро, но, конечно же, без результата, который мы желаем и разбираем ошибки. Я читал источник PHP, но если я не ошибаюсь, для xmlCatalogResolve()
или xmlInitializeCatalog()
или подобного, вообще нет никакого следа, возможно, немного глубже …
Мои вопросы: