【问题标题】:xsl:for-each with value of not producing outputxsl:for-each 的值为不产生输出
【发布时间】:2025-12-15 20:00:02
【问题描述】:

所以我有一个包含一些电影的简单 xml。我正在尝试执行一些 xslt 代码以将其格式化为表格。现在教授坚持对我觉得奇怪但没问题的流派使用 for each 循环。无论如何,这是我唯一无法开始工作的事情,我已经将我的代码简化为简单的代码,请看一下并告诉我哪里出错了:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="html" indent="yes"/>
	
  <xsl:template match="/">
    <html><head></head><body>
	
	<table border="1" cellspacing="0" cellpadding="10">
	<th style="background-color:lightgray">Title</th>
	<th style="background-color:lightgray">Director</th>
	<th style="background-color:lightgray">Genre</th>
	
	<xsl:for-each select="movies/movie">
	<tr>
		<td>
			<xsl:value-of select"title">
		</td>
		
		<td>
			<xsl:value-of select"director">
		</td>
		
		<td>
			<xsl:for-each select="genre">
				  
					<xsl:value-of select="genre"/>
				  
			</xsl:for-each>
		</td>
	</tr>	
	</xsl:for-each>	
	
	</table>
	</body></html></xsl:template>
	</xsl:stylesheet>

这里是xml:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Movies2.xslt"?>
  
<movies>
	
	<!-- 1 -->
    <movie>      
           
        <title>Schindler's List</title>
        <director>Steven Spielberg</director>  
        <genre>Biography, </genre>
		<genre>Drama, </genre>
		<genre>History</genre>
	
    </movie>
 
</movies> 

【问题讨论】:

  • 您的教授可以对他的学生施加任何他喜欢的限制,但请不要试图将它们强加给我们。我们在这里帮助您编写良好的工作代码,而不是帮助您实现学习计划中的下一个复选框。

标签: xml xslt foreach


【解决方案1】:

我看到 2 个问题:

  1. 您的两个xsl:value-of 元素格式不正确。您需要关闭它们并且select 属性应该有一个=
  2. 在您的内部xsl:for-each 中,您选择genre,这就是新的上下文。 select 应该是 . (which selects the context node)。

示例(也可以在此处查看http://xsltransform.net/94rmq6m):

<xsl:for-each select="movies/movie">
  <tr>
    <td>
      <xsl:value-of select="title"/>
    </td>

    <td>
      <xsl:value-of select="director"/>
    </td>

    <td>
      <xsl:for-each select="genre">

        <xsl:value-of select="."/>

      </xsl:for-each>
    </td>
  </tr> 
</xsl:for-each> 

【讨论】: