根据在for-each循环中未找到的属性值构建条件文本字符串。

huangapple go评论58阅读模式
英文:

Building a conditional text string based on the attribute values not found in the for-each loop

问题

这个for-each代码段显示输出(包括格式化)如下所示:

根据在for-each循环中未找到的属性值构建条件文本字符串。

所有辅导员编号将在1到20的范围内。我想在我的表格之后显示一个逗号分隔的列表,列出学生没有完成的辅导员编号。在上面的示例中,我想看到:

未分配:1, 3, 4, 6, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20

我支持我的XSL可能可以简化为一个简单的文本案例。但是,我想要做的事情可以通过XSLT-1来实现吗?

我正在尝试采用建议的答案,代码如下:

<xsl:variable name="missing-items">
    <xsl:call-template name="list-missing-items">
        <xsl:with-param name="items" select="$HistDB//AssignmentHistory/*/StudentItems/Item/Name[@Counsel and .=$strName]"/>
    </xsl:call-template>
</xsl:variable>
<missing-items>
    <xsl:value-of select="translate(normalize-space($missing-items), ' ', ',')"/>
</missing-items>

但是所有20个数字都被列出。

英文:

This this for-each snippet:

&lt;xsl:for-each select=&quot;$HistDB//AssignmentHistory/*/StudentItems/Item/Name[@Counsel and .=$strName]&quot;&gt;
	&lt;!-- Sort by counsel number (ascending) --&gt;
	&lt;xsl:sort select=&quot;@Counsel&quot; data-type=&quot;number&quot;/&gt;

	&lt;!-- Then sort by date (ascending) --&gt;
	&lt;xsl:sort select=&quot;local-name(../../..)&quot;/&gt;

	&lt;tr&gt;
		&lt;!-- Counsel --&gt;
		&lt;td class=&quot;counsel&quot;&gt;
			&lt;xsl:value-of select=&quot;@Counsel&quot;/&gt;
		&lt;/td&gt;
		&lt;!-- Date DD/MM/YYYY --&gt;
		&lt;td class=&quot;counsel&quot;&gt;
			&lt;xsl:variable name=&quot;strWeek&quot; select=&quot;local-name(../../..)&quot;/&gt;
			&lt;xsl:value-of select=&quot;substring($strWeek, 8, 2)&quot;/&gt;
			&lt;xsl:text&gt;/&lt;/xsl:text&gt;
			&lt;xsl:value-of select=&quot;substring($strWeek, 5, 2)&quot;/&gt;
			&lt;xsl:text&gt;/&lt;/xsl:text&gt;
			&lt;xsl:value-of select=&quot;substring($strWeek, 2, 4)&quot;/&gt;
		&lt;/td&gt;
	&lt;/tr&gt;

&lt;/xsl:for-each&gt;

It displays output (with formatting) like this:

根据在for-each循环中未找到的属性值构建条件文本字符串。

All the counsel numbers will be in the range 1 - 20. I would like to show a comma separated list after my table for the counsel numbers that the student has not done. In the above example I would like to see:

> Not assigned: 1, 3, 4, 6, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20

I support my XSL here could be stripped down to a simple text case. But can what I want to do be achieved with XSLT-1?


I am trying to adopt the suggested answer with:

&lt;xsl:variable name=&quot;missing-items&quot;&gt;
	&lt;xsl:call-template name=&quot;list-missing-items&quot;&gt;
		&lt;xsl:with-param name=&quot;items&quot; select =&quot;$HistDB//AssignmentHistory/*/StudentItems/Item/Name[@Counsel and .=$strName]&quot;/&gt;
	&lt;/xsl:call-template&gt;
&lt;/xsl:variable&gt;
&lt;missing-items&gt;
	&lt;xsl:value-of select=&quot;translate(normalize-space($missing-items), &#39; &#39;, &#39;,&#39;)&quot; /&gt;
&lt;/missing-items&gt;

But all 20 numbers are being listed.

答案1

得分: 1

以下是翻译好的部分:

考虑以下简化示例:

XML

<root>
    <item>2</item>
    <item>2</item>
    <item>5</item>
    <item>7</item>
    <item>10</item>
    <item>10</item>
    <item>10</item>
    <item>10</item>
    <item>12</item>
</root>

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/root">
    <xsl:variable name="missing-items">
        <xsl:call-template name="list-missing-items">
            <xsl:with-param name="items" select="item"/>
        </xsl:call-template>
    </xsl:variable>
    <missing-items>
        <xsl:value-of select="translate(normalize-space($missing-items), ' ', ',')"/>
    </missing-items>	
</xsl:template>

<xsl:template name="list-missing-items">
    <xsl:param name="items"/>
    <xsl:param name="max" select="20"/>
    <xsl:if test="$max > 1">
        <xsl:call-template name="list-missing-items">
            <xsl:with-param name="items" select="$items"/>
            <xsl:with-param name="max" select="$max - 1"/>
        </xsl:call-template>
    </xsl:if>
    <xsl:if test="not($max=$items)">
        <xsl:value-of select="$max"/>
        <xsl:text> </xsl:text>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

结果

<?xml version="1.0" encoding="UTF-8"?>
<missing-items>1,3,4,6,8,9,11,13,14,15,16,17,18,19,20</missing-items>
英文:

Consider the following simplified example:

XML

&lt;root&gt;
	&lt;item&gt;2&lt;/item&gt;
	&lt;item&gt;2&lt;/item&gt;
	&lt;item&gt;5&lt;/item&gt;
	&lt;item&gt;7&lt;/item&gt;
	&lt;item&gt;10&lt;/item&gt;
	&lt;item&gt;10&lt;/item&gt;
	&lt;item&gt;10&lt;/item&gt;
	&lt;item&gt;10&lt;/item&gt;
	&lt;item&gt;12&lt;/item&gt;
&lt;/root&gt;

XSLT 1.0

&lt;xsl:stylesheet version=&quot;1.0&quot; 
xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;
&lt;xsl:output method=&quot;xml&quot; version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; indent=&quot;yes&quot;/&gt;

&lt;xsl:template match=&quot;/root&quot;&gt;
	&lt;xsl:variable name=&quot;missing-items&quot;&gt;
		&lt;xsl:call-template name=&quot;list-missing-items&quot;&gt;
			&lt;xsl:with-param name=&quot;items&quot; select=&quot;item&quot;/&gt;
		&lt;/xsl:call-template&gt;
	&lt;/xsl:variable&gt;
	&lt;missing-items&gt;
		&lt;xsl:value-of select=&quot;translate(normalize-space($missing-items), &#39; &#39;, &#39;,&#39;)&quot; /&gt;
	&lt;/missing-items&gt;	
&lt;/xsl:template&gt;

&lt;xsl:template name=&quot;list-missing-items&quot;&gt;
	&lt;xsl:param name=&quot;items&quot;/&gt;
	&lt;xsl:param name=&quot;max&quot; select=&quot;20&quot;/&gt;
	&lt;xsl:if test=&quot;$max &gt; 1&quot;&gt;
		&lt;xsl:call-template name=&quot;list-missing-items&quot;&gt;
			&lt;xsl:with-param name=&quot;items&quot; select=&quot;$items&quot;/&gt;
			&lt;xsl:with-param name=&quot;max&quot; select=&quot;$max - 1&quot;/&gt;
		&lt;/xsl:call-template&gt;
	&lt;/xsl:if&gt;
	&lt;xsl:if test=&quot;not($max=$items)&quot;&gt;
		&lt;xsl:value-of select=&quot;$max&quot; /&gt;
		&lt;xsl:text&gt; &lt;/xsl:text&gt;
	&lt;/xsl:if&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;

Result

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;missing-items&gt;1,3,4,6,8,9,11,13,14,15,16,17,18,19,20&lt;/missing-items&gt;

huangapple
  • 本文由 发表于 2023年7月13日 22:28:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/76680522.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定