在Perl中使用LibXML检查XML include语句中文件的其他目录

在Perl中使用LibXML检查XML include语句中文件的其他目录,xml,perl,libxml2,Xml,Perl,Libxml2,我正在使用加载模式。该模式有多个include语句 问题是它引用的文件位于不同的根目录中,这也是在我的Perl代码中定义的 有没有办法让XML::LibXML检查这个根目录中的include语句中的文件 例如,假设XML文件的当前工作目录是C:\test\test2,并且XML文件具有以下语句: <xs:include schemaLocation="testFile.xsd" /> 它给出了一个错误,因为它无法找到testFile.xsd 有没有办法在其他目录中查找testFil

我正在使用加载模式。该模式有多个include语句

问题是它引用的文件位于不同的根目录中,这也是在我的Perl代码中定义的

有没有办法让
XML::LibXML
检查这个根目录中的include语句中的文件

例如,假设XML文件的当前工作目录是
C:\test\test2
,并且XML文件具有以下语句:

<xs:include schemaLocation="testFile.xsd" />
它给出了一个错误,因为它无法找到
testFile.xsd


有没有办法在其他目录中查找
testFile.xsd

由于信息太少,答案必须是否定的

如果XML被指定为允许搜索XSD文件,那么当格式错误的数据启动internet范围的匹配文件搜索时,所有的地狱都将崩溃

由于您使用的是Windows,我建议您可以使用Windows实现所需的功能


你应该看一看信息非常少的

,答案应该是否定的

如果XML被指定为允许搜索XSD文件,那么当格式错误的数据启动internet范围的匹配文件搜索时,所有的地狱都将崩溃

由于您使用的是Windows,我建议您可以使用Windows实现所需的功能


您应该了解一下

XML::LibXML是基于libxml2的,因此可以使用。您必须创建包含条目的目录文件,例如:

 <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
     <uri name="foo.xsd" uri="file:///c:/yourpath/foo.xsd"/>
 </catalog>


使用
$parser->Load_catalog($catalog_file)加载它

XML::LibXML基于libxml2,因此可以使用。您必须创建包含条目的目录文件,例如:

 <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
     <uri name="foo.xsd" uri="file:///c:/yourpath/foo.xsd"/>
 </catalog>


使用
$parser->Load_catalog($catalog_file)加载它

您可以使用截获从
XML::LibXML
到文件系统和网络的每次访问。您所要做的就是实现并注册四个回调函数。看一看这张照片


在您的情况下,您可以实现一个打开的处理程序来检查目录列表中的文件。

您可以使用截获从
XML::LibXML
到文件系统和网络的每次访问。您所要做的就是实现并注册四个回调函数。看一看这张照片


在您的情况下,您可以实现一个打开的处理程序来检查目录列表中的文件。

您正在讨论的一个示例会使这个问题变得更好。@mob谢谢,我已经更新了这个问题。在选项下面,我看到了四种可能的解决方案最简单的方法是设置
base\u uri
选项。@ikegami:你做到了吗?怎么做?你没有对这个问题给出一个最低限度的或者有效的演示,所以我没有什么可测试的(这也是为什么我没有把它作为答案发布的原因)。你所说的一个例子会让这个问题变得更好。@mob谢谢,我已经更新了这个问题。查看选项,我看到了四种可能的解决方案最简单的方法是设置
base\u uri
选项。@ikegami:你做到了吗?怎么做?你没有对这个问题给出一个最低限度的或者有效的演示,所以我没有什么可测试的(这也是为什么我没有把它作为答案发布的原因)。谢谢,但这似乎只在LibXML的解析器函数中受支持,而不是schema函数。谢谢,但这似乎只在LibXML的解析器函数中受支持,而在schema函数中不受支持。