我想创建链接,使用文件夹名称和文件名以及hypen符号。如果我的文件夹名称包含items / item.xsl,
我的输入XML是:
<Settings>
<code>MGT</code>
<url>http://tneb.com</url>
</Settings>
<page/>
<counter>
<enabled>true</enabled>
<text>Management Plan</text>
</counter>
XSL我在文件夹名称(/ items)中用作(item.xsl):
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:json="http://json.org/" xmlns:mf="http://example.com/mf" exclude-result-prefixes="#all">
<xsl:template match="Settings">
"Settings": {
<xsl:apply-templates/>
},
</xsl:template>
<xsl:template match="code">
"code": "<xsl:apply-templates/>",
</xsl:template>
<xsl:template match="url">
"url": "<xsl:apply-templates/>",
</xsl:template>
<xsl:template match="page"/>
<xsl:template match="counter">
"counter": {
<xsl:apply-templates/>
},
</xsl:template>
<xsl:template match="enabled">
"enabled": "<xsl:apply-templates/>",
</xsl:template>
<xsl:template match="text">
"text": "<xsl:apply-templates/>" ,
</xsl:template>
</xsl:stylesheet>
Json输出我得到了:
"Settings": {
"code": "MGT",
"url": "http://tneb.com",
},
"counter": {
"enabled": "true",
"text": "Management Plan ",
},
但我需要在设置和计数器文件夹之间创建一个pdf链接,如下所示:
"Settings": {
"code": "MGT",
"url": "http://tneb.com",
},
pdf: 'files/items-Management-Plan.pdf',
"counter": {
"enabled": "true",
"text": "Management Plan ",
},
我需要创建pdf链接,其中项表示文件夹名称, Management-Plan 表示输入文件中的文本名称。在文本名称空间之间填充输出中的hypen符号。
请就此提出建议。提前谢谢。
答案 0 :(得分:1)
获取样式表的URI作为变量:
<xsl:variable name="stylesheet-uri" as="xs:string" select="base-uri(document(''))"/>
价值是例如/path/to/items/items.xsl
然后将其拆分为路径组件:
<xsl:variable name="uri-components" as="xs:string+" select="tokenize($stylesheet-uri,'/')">
价值是例如(&#34;路径&#34;&#34;至&#34;&#34;项目&#34;&#34; items.xsl&#34)
文件夹名称是第二个最后一个组件:
<xsl:variable name="folder" as="xs:string" select="$uri-components[count($uri-components) - 1]"/>
PDF名称的第二部分是文本元素的值,空格字符由连字符替换:
<xsl:variable name="PDF-name-part" as="xs:string" select="translate(//text/text(), ' ', '-')"/>
最后,将这些位放在设置模板的末尾:
<xsl:template match="Settings">
"Settings": {
<xsl:apply-templates/>
},
"pdf:" "<xsl:value-of select="concat('files/',$folder,'-',$PDF-name-part,'.pdf')"/>"
</xsl:template>
答案 1 :(得分:0)
您应该添加根模板:
<xsl:template match="/">
<xsl:variable name="filename" select="replace(counter/text, ' ', '-')" />
<xsl:apply-templates select="Settings" />
<!-- The new PDF line -->
<xsl:text>"pdf": </xsl:text>
<xsl:value-of select="concat( '"', 'files/items-', $filename, '.pdf', '"', ',
' )" />
<xsl:apply-templates select="Counter" />
</xsl:template>
这会在您的设置和计数器输出之间添加所需的行。