仅使用XSL读取远程压缩xml
我想知道XSLT文件是否可以从远程zip文件夹中的XML(从工作中的服务器)读取数据,而无需任何外部处理器(saxon等),也无需下载 如果做不到这一点,我将求助于仅仅从zip读取信息。。。这就引出了我的另一个(新手)问题 我目前有一个XSLT,可以从下载和提取的XML文件中访问和获取数据,但如果不提取它,我就无法做到这一点。我已经了解到,使用Altova和xslt 2.0,可以使用document()函数从zip文件中读取数据,但到目前为止,我还无法实现这一点 这就是我试图做到的: 文档('name.zip | zip/folder/folder2/iwanthis.xml') 只是好像找不到文件。如果你告诉我我的错误并引导我进入XSLThood,我将永远感激你仅使用XSL读取远程压缩xml,xml,xslt,xslt-2.0,Xml,Xslt,Xslt 2.0,我想知道XSLT文件是否可以从远程zip文件夹中的XML(从工作中的服务器)读取数据,而无需任何外部处理器(saxon等),也无需下载 如果做不到这一点,我将求助于仅仅从zip读取信息。。。这就引出了我的另一个(新手)问题 我目前有一个XSLT,可以从下载和提取的XML文件中访问和获取数据,但如果不提取它,我就无法做到这一点。我已经了解到,使用Altova和xslt 2.0,可以使用document()函数从zip文件中读取数据,但到目前为止,我还无法实现这一点 这就是我试图做到的: 文档('n
非常感谢除非您的文件系统提供了一种本机的、透明的方式来访问zip文件,就像它是一个文件夹一样,否则这是不可能的
换句话说:您必须能够在系统上的任何其他程序中打开尝试馈送到
document()
的路径。如果这在其他任何地方都不起作用,那么什么会让您认为它在XSLT中起作用呢?我认为没有一种通用的方法可以做到这一点
但是,在许多基于Java的XSLT处理器(至少是Saxon和Xalan)中,可以使用来引用zip文件中的资源。在指向zip文件的URL前面加上jar:
,并在其后面加上/代码>及其内部文件的路径。如下:jar:file:///the/path/to/foo.zip!/xml
为了在其他处理器中实现同样的功能,您可能需要弄清楚它们是否允许注册自定义“URI处理程序”或等效程序来处理您想要支持的特殊URI。如果您使用的是Saxon,那么您可以使用
以下是一个例子:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:zip="http://www.expath.org/mod/zip"
version="2.0">
<xsl:import href="http://www.expath.org/mod/zip.xsl"/>
<xsl:output indent="yes"/>
<!--
$file is the ZIP file to use. If $entry is set, extract that
entry from $file, as an XML document. If not, list the content
of $file.
-->
<xsl:param name="file" as="xs:string"/>
<xsl:param name="entry" as="xs:string?"/>
<xsl:template name="main" match="/">
<xsl:choose>
<xsl:when test="$entry">
<!-- an XML entry in the ZIP file -->
<xsl:sequence select="zip:xml-entry($file, $entry)"/>
</xsl:when>
<xsl:otherwise>
<!-- the structure of the ZIP file -->
<xsl:sequence select="zip:entries($file)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
我刚刚使用以下XSLT 2.0样式表尝试了AltovaXML工具命令行XSLT 2.0处理器:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:template name="main">
<xsl:copy-of select="document('ziptest1.zip|zip/ziptest1/file.xml')"/>
</xsl:template>
</xsl:stylesheet>
其中“ziptest1.zip”是一个.zip文件,其中一个名为“ziptest1”的文件夹包含一个名为“file.xml”的文件,我得到的输出是该文件的内容。
如果无法解析路径,则会出现一个错误,显示“检索资源时出错”
我用“AltovaXML版本2010 rel.3”进行了测试,我认为这是最新版本 通过阅读您的所有(非常快的)回复,我得到了答案,并且由于仅使用XSLT就得到了“可能不可能”的答案和萨克森式的谈话,我想萨克森式的方法就是这样。我会先在家里试试,看看安装/使用有多麻烦,因为通常每当我提到在工作中安装东西时,他们都会拒绝我(我是实习生)。不过,我会等到马丁·霍宁回答我的评论
非常感谢您抽出时间,也感谢您这么快地回答
编辑:谢谢Martin,我将查看该功能的文档。好问题(+1)。请参阅我的答案,了解使用EXPath的解决方案。我对你的答案有点困惑。“我得到的输出是该文件的内容”是什么意思?它工作了吗,比如,您可以从xml中查找任何需要的内容?我这样问是因为在那之后,你说当路径无法解决时,你出现了一个错误。不确定你是否成功。我得到的错误(使用大致相同的方法:“foreach”而不是“copyof”)是类似于“无法找到声明的资源”(已翻译)。我想这和你得到的是一样的(他们是愚蠢的德国人,错误描述)。另外,我正在使用Altova XMLspy 2007。感谢AltovaXML工具的声明版本,我能够以我展示的方式访问zip文档中的XML数据。我不知道Altova XML Spy 2007是否支持这一点,请查看文档或在Altova支持论坛中询问。我刚刚意识到,似乎这是我唯一关注的地方。我确实在网上冲浪过很多次,然后才在这里发帖。好的,我只是想澄清一下。