Perl XML-SAX-Expat外部实体位置

时间:2013-10-08 21:17:52

标签: xml perl xml-simple xml-entities

我使用XML-Simple和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?

1 个答案:

答案 0 :(得分:2)

实用程序xmllint具有--noent标志,它将扩展根文档的ENTITY引用。如果找不到替代方法,可以使用以下方法快速重写输入文件:

xmllint --noent $ input.xml&gt; expanded.xml

它还具有预先计算完整XML文件的优势,而不是每次在运行时都这样做。