如何在数据未分组时选择值?

时间:2017-02-19 12:07:12

标签: xml xslt

我需要为表选择一些值,但是值没有在xml文件中分组,结构如下:

return new SimpleDateFormat("Z").format(new Date());

我知道如何在对这类数据进行分组时创建循环。当我得到文件时,最大索引是未知的。 在stackoverflow上,我只找到了组的例子,但也许我没有找到正确的关键词。

1 个答案:

答案 0 :(得分:0)

让我们首先将您的XML设置为正确的形状。

如果标记(在您的情况下为a)包含属性,则此属性必须具有值(在“=”之后)。 每个a标记都必须关闭(在最后的“>”之前包含“/”字符。

所以(可能)您的源XML(包括顶级标记)应该如下所示:

<main>
  <a attr="Name"/><v index="1">Lawrence</v>
  <a attr="Surname"/><v index="1">Karlton</v>
  <a attr="Name"/><v index="2">Ana</v>
  <a attr="Surname"/><v index="2">Karlton</v>
  <a attr="Average"/><v>75</v>
</main>

让我们做另一个假设,即每个来源“记录”都以<a attr="Name"/>开头 并继续到下一个<a attr="Name"/>或父标记的末尾, 以先到者为准。

在这种情况下,你可以:

  • 撰写匹配main代码的模板。
  • 使用xsl:for-each-group循环:
    • select="*" - 接受所有子标记,
    • group-starting-with="a[@attr='Name']" - 每个小组都以<a attr="Name"/>开头。

然后,根据每个组的内容,您可以例如:

  • 启动当前行(写入打开tr标记) - 我假设您生成了一个 HTML table
  • 对于每个输出列:
    • 检索具有特定值或a属性的源attr标记(等于 到输出列名称。)。
    • 从下一个同级v标记中获取此列的值。
  • 关闭当前行(写入结束tr标记)。