如何使用 XSLT 生成可选的类属性值
Posted
技术标签:
【中文标题】如何使用 XSLT 生成可选的类属性值【英文标题】:How to make optionally generated class attribute value using XSLT 【发布时间】:2021-01-18 09:32:09 【问题描述】:我将使用 XSLT,但我不知道如何生成动态附加的类名。和class="has-title column-4"
一样,我想创建以空格分隔的经典类值。
// Original XML string..
<contents>
<box type="list" mark="kr-con">
<li>test texts..</li>
<li>test texts..</li>
..
<li>test texts..</li>
</box>
</contents>
XSLTProcessing 之后..我想得到,
<div class="box box-list column-1">
<li>test texts..</li>
<li>test texts..</li>
.. (processed elements)
<li>test texts..</li>
</div>
在原始 xml 中,box[@type]
具有默认值 list
,因此原始 xml 字符串虽然结果具有 box-list
类,但没有此属性。
此外,box[@column]
属性不存在,但具有默认值 1
并导致 column-1
类。
..
类似的东西..
我已经尝试了这么多小时,但我认为我无法处理这个.. XSL 的事情。非常沮丧..但仍然需要..
如何生成类值?
我尝试使用<xsl:variable>
标签创建一些变量,但它出错的次数越来越多..
在查看答案并尝试后..我得到了以下..
<!-- figure 처리 -->
<xsl:template match="figure">
<!-- align 속성 처리 -->
<xsl:variable name="align">
<xsl:choose>
<xsl:when test="not(@align) and parent::p and position()=1">
<xsl:value-of select="'right'"/>
</xsl:when>
<xsl:when test="not(@align)">
<xsl:value-of select="'center'"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@align"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- width 처리 -->
<xsl:variable name="width">
<xsl:choose>
<xsl:when test="not(@width)">
<xsl:value-of select="'width-6'"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@width"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- 주 요소 처리 -->
<xsl:choose>
<xsl:when test="parent::li">
<img src="@url" class="width-12"/>
</xsl:when>
<xsl:otherwise>
<img src="@url" class="align-@align @width"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
哈哈~
【问题讨论】:
【参考方案1】:我不确定我是否真的明白你想要做什么,但这应该给你一个开始的例子。
在 XSLT 1.0 中
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="contents/box">
<xsl:variable name="box">
<xsl:choose>
<xsl:when test="@type='list'">
<xsl:value-of select="'box-list'"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@type"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="col">
<xsl:choose>
<xsl:when test="@column">
<xsl:value-of select="@column"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'1'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<div class="concat('box',' ',$box,' ','column-',$col)">
<xsl:copy-of select="li"/>
</div>
</xsl:template>
</xsl:stylesheet>
在这里查看它的工作原理:https://xsltfiddle.liberty-development.net/3MEcZxw
【讨论】:
谢谢,我记得你。我相信你在这个社区教过我很多次。非常感谢您的所有努力。我用你的提示解决了这个问题。以上是关于如何使用 XSLT 生成可选的类属性值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 xslt 获取 XML 的属性值和代码作为 html 的值