gpt4 book ai didi

php - 在 XSLT 中进行文件路径操作

转载 作者:可可西里 更新时间:2023-11-01 12:52:54 25 4
gpt4 key购买 nike

我希望我生成的输出文件包含指向相对于样式表的路径的文件路径。样式表的位置可以更改,我不想为样式表使用参数。我的解决方案是获取完整的样式表 URI:

<xsl:variable name="stylesheetURI" select="document-uri(document(''))" />

现在我只需要从$stylesheetURI 中截取文件名。这启发了我编写 PHP 函数的 XSLT 2.0 克隆 basenamedirname :

<xsl:function name="de:basename">
<xsl:param name="file"></xsl:param>
<xsl:sequence select="tokenize($file, '/')[last()]" />
</xsl:function>

<xsl:function name="de:dirname">
<xsl:param name="file"></xsl:param>
<xsl:sequence
select="string-join(tokenize($file, '/')[position() != last()], '/')" />
</xsl:function>

现在我可以在我的模板中做这样的事情:

<img src="{concat(de:dirname($stylesheetURI),'/img/myimage,png')}" />

我的问题是:是否有更好/更快的方法来使用 native XSLT 2.0 实现此目的?

最佳答案

我测试了(不太广泛)这些函数,它们的执行速度似乎比提供的快 25%。当然,结果取决于字符串长度和限定符的数量:

  <xsl:function name="de:basename" as="xs:string">
<xsl:param name="pfile" as="xs:string"/>
<xsl:sequence select=
"de:reverseStr(substring-before(de:reverseStr($pfile), '/'))
" />
</xsl:function>

<xsl:function name="de:dirname" as="xs:string">
<xsl:param name="pfile" as="xs:string"/>
<xsl:sequence select=
"de:reverseStr(substring-after(de:reverseStr($pfile), '/'))
" />
</xsl:function>

<xsl:function name="de:reverseStr" as="xs:string">
<xsl:param name="pStr" as="xs:string"/>

<xsl:sequence select=
"codepoints-to-string(reverse(string-to-codepoints($pStr)))"/>
</xsl:function>

关于php - 在 XSLT 中进行文件路径操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3116942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com