在文字斜杠上标记字符串

时间:2019-06-24 01:35:47

标签: xml string xslt xslt-2.0

对于锚链接的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 ...

1 个答案:

答案 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>