Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 文档函数是否总是在每次转换期间读取输入文件?_Xslt_Xslt 1.0 - Fatal编程技术网

Xslt 文档函数是否总是在每次转换期间读取输入文件?

Xslt 文档函数是否总是在每次转换期间读取输入文件?,xslt,xslt-1.0,Xslt,Xslt 1.0,这是我关于文档功能的问题 文档函数是否总是为每次转换读取输入文件?还是第一次将其加载到内存中,然后从内存中读取以进行后续转换 这里提出这个问题的原因是,我有一个非常重要的输入文件,它在转换期间总是检查值 如何在这些情况下实现最佳性能 使用文档功能时,库无法 知道你是否会再次使用它,或者这是一个 临时访问。 任何时候处理文档时,都必须 解析等,这是比较耗时的。为了避免 多次重读和重新解析文档的开销, 库维护一个文档列表,作为 转换上下文。任何文档的已解析图像 已访问的将添加到此列表中,并且该列表与

这是我关于文档功能的问题

文档函数是否总是为每次转换读取输入文件?还是第一次将其加载到内存中,然后从内存中读取以进行后续转换

这里提出这个问题的原因是,我有一个非常重要的输入文件,它在转换期间总是检查值

如何在这些情况下实现最佳性能

使用文档功能时,库无法 知道你是否会再次使用它,或者这是一个 临时访问。 任何时候处理文档时,都必须 解析等,这是比较耗时的。为了避免 多次重读和重新解析文档的开销, 库维护一个文档列表,作为 转换上下文。任何文档的已解析图像 已访问的将添加到此列表中,并且该列表与 它引用的文档只有在转换完成时才被释放 上下文被释放。

当您使用文档功能时,库无法 知道你是否会再次使用它,或者这是一个 临时访问。 任何时候处理文档时,都必须 解析等,这是比较耗时的。为了避免 多次重读和重新解析文档的开销, 库维护一个文档列表,作为 转换上下文。任何文档的已解析图像 已访问的将添加到此列表中,并且该列表与 它引用的文档只有在转换完成时才被释放 上下文被释放。

将从单个URL解析XML的详细信息委托给。它不指定是否缓存已解析的文档,但要求函数稳定,默认情况下,此函数为·稳定。如果解析为绝对URI引用后为两个调用提供了相同的URI引用,则对该函数的两个调用返回相同的文档节点。因此,如果下面的表达式不引发错误,它将始终为true:docfoo.xml是docfoo.xml

如果您想多次访问同一文档,则实现可能会缓存结果,但如果您加载多个大型文档而无法处理其中任何一个文档,则实现可能会成为一个缺点

您使用哪个XSLT2.0处理器?Saxon必须显式地丢弃缓存的文档,以便表明对文档'foo.xml'或文档'foo.xml'的调用通常是缓存的。

将解析xml的详细信息从单个URL委托给。它不指定是否缓存已解析的文档,但要求函数稳定,默认情况下,此函数为·稳定。如果解析为绝对URI引用后为两个调用提供了相同的URI引用,则对该函数的两个调用返回相同的文档节点。因此,如果下面的表达式不引发错误,它将始终为true:docfoo.xml是docfoo.xml

如果您想多次访问同一文档,则实现可能会缓存结果,但如果您加载多个大型文档而无法处理其中任何一个文档,则实现可能会成为一个缺点


您使用哪个XSLT2.0处理器?Saxon必须显式地丢弃缓存的文档,以便表明对文档'foo.xml'或文档'foo.xml'的调用通常是缓存的。

使用文档或文档读取的文档在转换期间几乎不可避免地会被缓存,因为这是满足规范中稳定性要求的唯一方法。但我认为您的问题是关于跨多个转换的缓存。这将取决于处理器

现在几乎没有理由使用Saxon 6.5。即使出于可移植性的原因,您想限制自己使用XSLT1.0,通常最好使用更新的Saxon版本


Saxon至少在当前版本中,我不记得6.5版本会在JAXP转换器的生命周期内缓存文档,因此如果您将同一个转换器用于多个转换,文档将不会被重新解析。为了更精确的控制,请考虑使用S9API API。这允许您使用DocumentBuilder在内存中构建文档树,然后将其作为样式表参数的值传递给每个转换,或者通过注册识别URI的URIResolver来响应对文档或文档的调用。当然,使用任何JAXP转换引擎,您都可以在URIResolver中实现自己的文档缓存。

使用文档或文档读取的文档几乎不可避免地会在转换期间被缓存,因为这是满足规范中稳定性要求的唯一方法。但我认为您的问题是关于跨多个tr的缓存 信息。这将取决于处理器

现在几乎没有理由使用Saxon 6.5。即使出于可移植性的原因,您想限制自己使用XSLT1.0,通常最好使用更新的Saxon版本


Saxon至少在当前版本中,我不记得6.5版本会在JAXP转换器的生命周期内缓存文档,因此如果您将同一个转换器用于多个转换,文档将不会被重新解析。为了更精确的控制,请考虑使用S9API API。这允许您使用DocumentBuilder在内存中构建文档树,然后将其作为样式表参数的值传递给每个转换,或者通过注册识别URI的URIResolver来响应对文档或文档的调用。当然,对于任何JAXP转换引擎,您都可以在URIResolver中实现自己的文档缓存。

例如,如果转换被调用100次,那么首先调用document函数读取文件并将其作为解析的图像/对象加载到内存中。从第二次调用开始,每当调用document函数时,它只引用对象,不再调用文件读取。你是这么说的吗?对不起,我还是很困惑。如果您有示例或链接来解释更多内容,请提供帮助。例如,如果转换被调用100次,则首先调用document函数读取文件并将其作为解析的图像/对象加载到内存中。从第二次调用开始,每当调用document函数时,它只引用对象,不再调用文件读取。你是这么说的吗?对不起,我还是很困惑。如果您有更多的示例或链接来解释,请提供帮助。是的,Saxon 6.5.5 for XSLT 1.0My注释在您将问题标记为XSLT-2.0时指的是Saxon 9.5和XSLT 2.0。您对XSLT 1.0有什么想法吗?是的,Saxon 6.5.5 for XSLT 1.0My注释在您将问题标记为XSLT-2.0时指的是Saxon 9.5和XSLT 2.0。您对XSLT 1.0有什么想法吗?