2013-10-08 3 views
3

Я использую XML-Simple вместе с XML-SAX-Expat для анализа документа с внешними объектами. Я объявляю свое предприятие как:Perl XML-SAX-Expat местоположение внешнего объекта

<!ENTITY chap1 SYSTEM "chapter-1.xml"> 

И ссылаюсь на другой файл в том же каталоге.

Однако, он ищет мой текущий рабочий каталог для файла, а не местоположение корневого документа.

404 File `/u/egge/chapter-1.xml' does not exist 

Handler couldn't resolve external entity at line 35, column 2, byte 1040 
error in processing external entity reference at line 35, column 2, byte 1040 at  /perl5/PROJ/XML-Parser/2.36-2.0.1-5.10-64/lib/perl5/XML/Parser.pm line 187 

Как я могу заставить его использовать каталог корневого документа вместо моего CWD?

+0

По какой-либо причине вы не можете прост 'chdir' определить местоположение корневого документа? В противном случае вам, вероятно, потребуется включить образец кода, демонстрирующий, что вы делаете. – RickF

+0

Это зависит от среды, в которой вы находитесь. Это Apache? CGI/mod_perl? Возможно, ваш document_root доступен через переменные типа $ r. – KateYoak

ответ

2

У утилиты xmllint есть флаг --noent, который расширит ссылки ENTITY корневого документа. Если вы не можете найти альтернативу, вы всегда можете переписать входной файл быстро с этим:

xmllint --noent $ Input.xml> expanded.xml

Он также имеет преимущество предварительно рассчитав полный XML файл, а не делать это каждый раз во время выполнения.

+0

Спасибо, я подумывал об этом. – brianegge

 Смежные вопросы

  • Нет связанных вопросов^_^