【问题标题】:How to access elements of a subelement using XSLT?如何使用 XSLT 访问子元素的元素?
【发布时间】:2015-11-16 18:26:38
【问题描述】:

我有以下 XML 代码:

http://codeshare.io/MQyQu

并且正在使用以下 XSLT 代码:

http://codeshare.io/LWl6g

与用于 XSLT 的 W3 Schools “Tryit Editor”工具协调。由于声誉问题,我无法链接它。

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

XSLT 的 W3 学校示例仅使用一个子元素,我不知道如何处理两个子元素。

我的理解是第一个

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

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

在循环中,我有一个 HTML 表,我想在其中输出类元素的信息,即学期的子元素。我认为将此代码嵌套在原始 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 的文本“CIT”。

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

如果我对为什么 XSLT 代码没有按照我想要的方式读取 XML 代码的推断不正确,正确的原因是什么?我该如何解决?

【问题讨论】:

    标签: html xml xslt


    【解决方案1】:

    这里有几个问题...

    1. 您的输入 XML 格式不正确 - 有以 &lt;number&gt; 开头但未关闭的标签(似乎以 &lt;/dept&gt; 结尾的标签旨在关闭它)。
    2. 您的输入 XML 包含未转义的 & 符号。将&amp;amp; 替换为&amp;amp;
    3. 您的样式表无效,因为它缺少&lt;/table&gt; 标记。您需要添加它。
    4. 您的内部for-each 循环应该在&lt;td&gt;...&lt;/td&gt; 节点周围有&lt;tr&gt;&lt;/tr&gt; 标记。

    这是一个解决了所有这些问题的 XSLTransform(我添加了一个 output 指令,以便 XSLTransform 可以在窗口中将其显示为 HTML): http://xsltransform.net/94rmq66

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2019-01-17
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多