对于锚链接的XSL 123
属性设置,我有以下代码:
id
在这种情况下,第一个 <xsl:attribute name="id">
<xsl:variable name="articleUrl" select="concat(substring-before(substring-after(substring-after(document/documentinfo/uri/@path,$ps-group-path), 'content'),'psml'),'html')" as="xs:string*"/>
<xsl:variable name="articleArr" select="tokenize($articleUrl,'//')" />
<xsl:variable name="articleIndex" select="count($articleArr)" as="xs:integer" />
<xsl:value-of select="$articleArr[$articleIndex]" as="xs:string" />
</xsl:attribute>
中select
的值为xsl:variable
。我想用文字斜杠/news/2018/AT04651-article.html
分割articleUrl
,然后用该数组做一些其他的巨型选择以提取数组的最后一部分(/
),然后最终关闭AT04651-article.html
部分以访问值-article.html
...
现在唯一的问题是,当我尝试用斜杠对字符串进行标记时,即AT04651
值返回的值,我最终得到的是原始字符串id
,而不是{{1} },并且/news/2018/AT04651-article.html
的值返回为1 ...好像AT04651-article.html
函数似乎无法正常工作...有人能告诉我我哪里出问题了吗?>
在这种情况下,我正在使用XSLT 2.0 ...
答案 0 :(得分:1)
如果要在单个斜杠上拆分字符串,为什么要在双斜杠上标记化?我认为如果您进行更改可以解决您的问题。
我测试了这种对您提供的输入变量进行硬编码的方法,然后在标记化每个项目及其索引之后将其输出。
代码
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<items>
<xsl:variable name="articleUrl" select="'/news/2018/AT04651-article.html'" />
<xsl:variable name="articleArr" select="tokenize($articleUrl,'/')" />
<xsl:variable name="articleIndex" select="count($articleArr)" />
<xsl:for-each select="$articleArr">
<item index="{position()}"><xsl:value-of select="." /></item>
</xsl:for-each>
</items>
</xsl:template>
</xsl:stylesheet>
输出
<?xml version="1.0" encoding="UTF-8"?>
<items>
<item index="1"/>
<item index="2">news</item>
<item index="3">2018</item>
<item index="4">AT04651-article.html</item>
</items>