gpt4 book ai didi

html - 有没有一种优雅的方法可以使用 XSLT 添加多个 HTML 类?

转载 作者:太空狗 更新时间:2023-10-29 13:58:05 25 4
gpt4 key购买 nike

假设我正在将一个多项选择测验从任意 XML 格式转换为 HTML。每个选择都将表示为 HTML <li>结果文档中的标记。对于每个选择,我想添加一个 HTML classcorrect<li>如果那个选择是正确的答案。此外,如果该选项是用户选择的选项,我想添加一类 submitted<li> .因此,如果选择是正确的以及提交的选项,<li>应该有一个 classcorrect submitted .

据我所知,以空格分隔的属性值不是 XML 数据模型的一部分,因此不能通过 XSLT 直接创建。但是,我觉得有一种更好的方法可以做到这一点,而不是在代码中为每种可能的类组合乱加一个条件(在这个例子中这是可以接受的,但在更复杂的场景中却很笨拙)。

我怎样才能优雅地解决这个问题?

期望结果示例:

<p>Who trained Obi-Wan Kenobi?</p>
<ul>
<li>Mace Windu</li>
<li class="correct submitted">Qui-Gon Jinn</li>
<li>Ki-Adi-Mundi</li>
<li>Yaddle</li>
</ul>

最佳答案

首先,XML 中的属性值中的空格没有任何问题:粗略地说,attribute value normalization解析文档时,将空白字符转换为空格并将相邻空格折叠为单个空格,但绝对允许使用空格。 编辑:有关更多信息,请参见下文。

Matthew Wilson 的方法未能在可能的值之间包含空格,正如您在评论中提到的那样。然而,他的方法基本上是正确的。拼图的最后一 block 是你不喜欢多余的空间:这些可以通过使用 <a href="http://www.w3.org/TR/1999/REC-xpath-19991116#function-normalize-space" rel="noreferrer noopener nofollow">normalize-space</a> 来消除。 XPath 函数。

以下样式表将所有部分放在一起——请注意,它不会对其输入文档执行任何操作,因此出于测试目的,您可以针对任何 XML 文档运行它,甚至针对自身运行它,以验证输出是否符合您的要求要求。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="foo0" select="false()"/>
<xsl:variable name="bar0" select="true()"/>

<xsl:variable name="foo1" select="true()"/>
<xsl:variable name="bar1" select="false()"/>

<xsl:variable name="foo2" select="true()"/>
<xsl:variable name="bar2" select="true()"/>

<xsl:template match="/">

<xsl:variable name="foobar0">
<xsl:if test="$foo0"> foo</xsl:if>
<xsl:if test="$bar0"> bar</xsl:if>
</xsl:variable>

<xsl:variable name="foobar1">
<xsl:if test="$foo1"> foo</xsl:if>
<xsl:if test="$bar1"> bar</xsl:if>
</xsl:variable>

<xsl:variable name="foobar2">
<xsl:if test="$foo2"> foo</xsl:if>
<xsl:if test="$bar2"> bar</xsl:if>
</xsl:variable>

<li>
<xsl:attribute name="class">
<xsl:value-of select="normalize-space($foobar0)"/>
</xsl:attribute>
</li>
<li>
<xsl:attribute name="class">
<xsl:value-of select="normalize-space($foobar1)"/>
</xsl:attribute>
</li>
<li>
<xsl:attribute name="class">
<xsl:value-of select="normalize-space($foobar2)"/>
</xsl:attribute>
</li>

</xsl:template>
</xsl:stylesheet>

编辑:关于在属性值内分隔离散组件的空格问题:XML 规范将许多可能的有效结构定义为 attribute types ,包括 IDREFS 和 NMTOKENS。第一个案例匹配 Names生产,第二个案例匹配 NMTokens生产;这两个产品都被定义为包含适当类型的多个值,由空格分隔。因此,以空格分隔的值列表作为单个属性的值是 XML 信息集的固有组成部分。

关于html - 有没有一种优雅的方法可以使用 XSLT 添加多个 HTML 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1625548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com