Bug #4274

Using a catalog file with Saxon in PHP

Added by Alf Eaton about 1 year ago. Updated 10 months ago.

Saxon-C Internals
Start date:
Due date:
% Done:


Estimated time:
Found in version:
Fixed in version:


I'm using the Saxon/C PHP extension, v1.1.2, and I'd like to be able to use a catalog file for DTD resolution.

If the following worked I'd be able to either edit /etc/xml/catalog or edit to point to a different catalog file, but I can only get a "Cannot find" error:

    $saxonProcessor = new Saxon\SaxonProcessor();

    // use resolver.jar
    $saxonProcessor->setConfigurationProperty('', '');

    $processor = $saxonProcessor->newXsltProcessor();
    $result = $processor->transformToString();

As the CLASSPATH environment variable doesn't seem to be relevant in this situation, where is the resolver looking for

SaxonProcessor.h (17.5 KB) SaxonProcessor.h O'Neil Delpratt, 2019-08-14 00:15
php_saxon.h (9.81 KB) php_saxon.h O'Neil Delpratt, 2019-08-14 00:15
SaxonProcessor.cpp (23 KB) SaxonProcessor.cpp O'Neil Delpratt, 2019-08-14 00:15
php7_saxon.cpp (120 KB) php7_saxon.cpp O'Neil Delpratt, 2019-08-14 00:15


#1 Updated by Michael Kay about 1 year ago

  • Project changed from Saxon to Saxon/C
  • Category set to PHP Build
  • Assignee set to O'Neil Delpratt

#4 Updated by O'Neil Delpratt about 1 year ago

  • Status changed from New to In Progress
  • Found in version set to 1.1.2

Thanks for reporting this issue. All the right classes are packaged within Saxon/C for using a catalog file, but don't think it will work directly using the API. I am investigating it further for a workaround or what we can add in the API.

#5 Updated by O'Neil Delpratt about 1 year ago

  • Tracker changed from Support to Bug

To support catalog files in Saxon/C PHP it will require some addition code in the C++ API, which will in turn work for the PHP API...

We need to do the equivalent in C++ using JNI for the following Java code:

String catalog = "/Applications/oxygen-2/frameworks/dita/catalog.xml";
XmlCatalogResolver.setCatalog(catalog, proc.getUnderlyingConfiguration(), true);

I am marking this as a bug issue. Is this something that can be fixed for the next release or is it need more urgently? In which case I could put together a patch in the C++ and PHP code.

#6 Updated by Alf Eaton about 1 year ago

Thanks for investigating this issue - if there's a release planned for the next couple of weeks that would be fine, otherwise a patch would be great.

#7 Updated by O'Neil Delpratt about 1 year ago


I have managed to get the catalog feature working within Saxon/C for C++ and PHP. We cannot promise a new release will be out in the next few weeks. But we can provide you with some patched files which will allow you to use the catalog files.

Therefore please replace the following files (SaxonProcessor.h, SaxonProcessor.cpp, php_saxon.h and php7_saxon.cpp) with these new copies attached to this bug issue. I suggest backing up the files before you replace them too.

See PHP example below of using a catalog file (I have assumed you are using PHP7).

           $saxonProcessor = new Saxon\SaxonProcessor();
           $processor = $saxonProcessor->newXsltProcessor();

           $isTracing = false;
           $saxonProcessor->setCatalog("/dir/samples/php/catalog-test/catalog.xml", $isTracing); 
           $result = $processor->transformToString();

#8 Updated by Alf Eaton about 1 year ago

I can confirm that the patched files worked perfectly - many thanks for finding a quick solution to this issue.

#9 Updated by O'Neil Delpratt 10 months ago

  • Status changed from Resolved to Closed
  • Fixed in version set to 1.2.0

Big fix applied in the Saxon/C 1.2.0 release.

Please register to edit this issue

Also available in: Atom PDF