我使用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?
答案 0 :(得分:2)
实用程序xmllint具有--noent标志,它将扩展根文档的ENTITY引用。如果找不到替代方法,可以使用以下方法快速重写输入文件:
xmllint --noent $ input.xml&gt; expanded.xml
它还具有预先计算完整XML文件的优势,而不是每次在运行时都这样做。