【发布时间】:2017-06-23 07:11:20
【问题描述】:
我想通过使用文件夹名称以及带有连字符的文件名来创建链接。如果我的文件夹名称包含 items/item.xsl,
我的输入 XML 是:
<Settings>
<code>MGT</code>
<url>http://tneb.com</url>
</Settings>
<page/>
<counter>
<enabled>true</enabled>
<text>Management Plan</text>
</counter>
我在文件夹名称(/items)中用作(item.xsl)的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 链接,其中 items 表示文件夹名称,Management-Plan 表示输入文件中的文本名称。在输出中文本名称的空格之间用连字符符号填充。
请就此提出建议。提前致谢。
【问题讨论】:
-
你的第一个 sn-p 有一个不匹配的
</trackingSettings>,所以它不是 XML。第二个“JSON”输出有一个未引用的pdf属性名称,所以它不是 JSON。至于创建 JSON,您在样式表中使用了version="3.0",如果您真的使用该版本,那么有更好的方法来构造 JSON,因为 XSLT/XPath 3.0/3.1 具有映射和数组,并且可以将它们序列化为 JSON。 -
现在我编辑了@MartinHonnen。除了 json 输出之外,使用 XSLT 进行正常转换是否可以做到这一点
-
考虑向我们展示包含
Settings和counter元素的父元素。为此,您可以编写一个模板,例如<xsl:apply-templates select="Settings"/>, "pdf" : "files/items-Management-Plan.pdf", <xsl:apply-templates select="counter"/>.