如何使用XSL中的文件扩展名使用直列/附件转换为URL



在XSL脚本的帮助下,我将URL从XML提取到文件。此URL的结局是:api/v1/objects/uuid/b79de4e5-8d1f-4840-b85f-e052db92a52f/file/id/1001974122/file_version/name/small/disposition/inline

当我在Web浏览器中输入此URL时,它将通过文件扩展名在结束eas/partitions-inline/48/1001/1001974000/1001974122/9a4191c7ce7414650d36ac9bc1c2b012261013ad/image/png/8223@33a8cae1-a9fa-4655-8c3d-b71241bbc99b_1001974122_small.png

的情况下转换为URL

有没有XSL没有浏览器的XSL进行此转换的方法?

我需要输出XML中有文件扩展名的URL,以便将收割机运行。

这个问题是关于URL转换(以及使用的XML工具(非常非正式的,但是让我们假设对原始URL的3xx响应以及输出结果URL的意图。例如:

$ curl --silent --head http://stackoverflow.com | grep Location
Location: https://stackoverflow.com/

在转换XML时要做同样的事情。XSLT处理器需要拥有HTTP客户端。Expath中有HTTP客户端模块,收集了XPATH扩展规范和实现。

要快速安装expath,下载页面上有安装程序。它带有撒克逊XSLT处理器。在编写时,它是指expath-repo-installer-0.13.1.jar。像:

一样运行它
java -jar expath-repo-installer-0.13.1.jar

安装后,下载了用于撒克逊人,expath-http-client-saxon-0.12.0.zip的HTTP客户端模块,然后从中提取expath-http-client-saxon-0.12.0.xar。然后将其安装到expath存储库:

mkdir repo
bin/xrepo --repo repo install /path/to/expath-http-client-saxon-0.12.0.xar

然后您可以使用bin/saxon

data.xml

<?xml version="1.0" encoding="utf-8"?>
<data>
  <datum><url>http://python.org</url></datum>
  <datum><url>http://stackoverflow.com</url></datum>
</data>

text.xslt

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:http="http://expath.org/ns/http-client"
  exclude-result-prefixes="#all"
  version="2.0">
  <xsl:import href="http://expath.org/ns/http-client.xsl"/>
  <xsl:output method="xml" encoding="utf-8" indent="yes"/>
  <xsl:template match="/">
    <result>
      <xsl:for-each select="data/datum">
        <!-- the request element -->
        <xsl:variable name="request" as="element(http:request)">
          <http:request method="head" follow-redirect="false">
            <xsl:attribute name="href">
              <xsl:value-of select="url"/>
            </xsl:attribute> 
          </http:request>
        </xsl:variable>
        <!-- sending the request -->
        <xsl:variable name="response" select="http:send-request($request)"/>
        <!-- output -->
        <url>
          <orig><xsl:value-of select="url"/></orig>
          <location>
            <xsl:value-of 
              select="$response[1]/header[@name='location']/@value"/>
          </location>
        </url>
      </xsl:for-each>  
    </result>
  </xsl:template>
</xsl:stylesheet>

有关如何控制HTTP客户端的更多详细信息,请参见该模块的规格。

然后bin/saxon --repo repo data.xml test.xslt产生:

<?xml version="1.0" encoding="utf-8"?>
<result>
   <url>
      <orig>http://python.org</orig>
      <location>https://python.org/</location>
   </url>
   <url>
      <orig>http://stackoverflow.com</orig>
      <location>https://stackoverflow.com/</location>
   </url>
</result>

相关内容

  • 没有找到相关文章

最新更新