如何使用XSLT访问子元素的元素?

时间:2015-11-16 18:26:38

标签: html xml xslt

我有以下XML代码:

http://codeshare.io/MQyQu

并使用以下XSLT代码:

http://codeshare.io/LWl6g

与W3 Schools" Tryit Editor" XSLT的工具。由于声誉,我无法将其链接。

我的问题是XSLT不解析所有元素(目录元素中的学期元素和学期元素中的类元素)。

WSL学校的XSLT示例只使用了一个子元素,而且我对两个子元素的操作感到茫然。

我的理解是第一个

  <xsl:for-each select="catalog/semester">

将循环目录元素中的学期元素。

在循环中,我有一个HTML表,我想输出class元素的信息,即学期的子元素。我认为将此代码嵌套在原始for-each循环中应该为表中的每个类输出每个元素的文本:

<xsl:for-each select="class">

    <td><xsl:value-of select="dept"/></td>
    <td><xsl:value-of select="number"/></td>
    <td><xsl:value-of select="title"/></td>
</xsl:for-each>

在HTML表格中,只显示元素类的第一个子元素dept的文本&#34; CIT&#34 ;.

我推断for-each循环没有解析。如果这是原因,为什么?

如果我推断为什么XSLT代码没有读取XML代码我的想法是不正确的,那么正确的原因是什么以及如何解决?

1 个答案:

答案 0 :(得分:2)

这里有几个问题......

  1. 您的输入XML格式不正确 - 有些标记开始<number>但尚未关闭(似乎以</dept>结尾的标记旨在关闭它)。
  2. 您的输入XML包含未转义的&符号。将&替换为&amp;
  3. 您的样式表无效,因为它缺少</table>标记。您需要将其添加进来。
  4. 您的内部for-each循环可能在<tr>个节点周围有</tr><td>...</td>个标记。
  5. 这是一个解决了所有这些问题的XSLTransform(我添加了一条output指令,以便XSLTransform可以在窗口中将其显示为HTML): http://xsltransform.net/94rmq66

    所以最重要的是你是对的,XSLT解析器无法读取XML,因为它的XML格式错误。它根据您的输入做了任何事情是非常糟糕的事实,也是不使用W3Schools XSLT工具的另一个原因。