【问题标题】:group an element using xslt使用 xslt 对元素进行分组
【发布时间】:2013-03-11 12:23:45
【问题描述】:

我想在 xsl 文件中使用“分组依据”功能,但我只是收到错误。

这是我的代码:

<table xsl:version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<tr>
<th>A</th>
<th>B</th>
</tr>
<xsl:for-each-group select="Result/Record" group-by="AC_CPR">
<tr>
  <td><xsl:value-of select="AC_CPR"/></td>
  <td><xsl:value-of select='sum(//AC_LNA/Row/Column[2])'/></td>
</tr>

错误是这个:

msxml3.dll 错误'80004005'

“关键字表可能不包含 xsl:for-each-group”。

xml 是这样的:

 <Result>
<Record code="033007">
<Name>demo</Name>
 <AC_CPR>02080</AC_CPR>
<date>10/06/2009</date>
<AC_LNA ncols="2">
<Row>
<Column>000115</Column>
<Column>9</Column>
</Row>
</AC_LNA>
<AC_FSE>10/06/2009</AC_FSE>
<AC_AV/>
</Record>
</Result>

【问题讨论】:

  • 那么您究竟从哪个应用程序得到了哪些错误?要使用 XSLT 2.0,您需要使用 XSLT 2.0 处理器,例如 Saxon 9 或 AltovaXML 或 XmlPrime。
  • 你好,错误是:msxml3.dll error '80004005' "Keyword table may not contain xsl:for-each-group"。
  • 所以,如果我没有此处理器,我似乎无法在我的服务器中运行 XSLT 2.0。可以在 xlst 1.0 中完成吗?
  • 是的,可以在 XSLT 1.0 中进行分组。您的源 XML 是什么样的?
  • 我在我的问题中添加了xml结构

标签: xml xslt xslt-2.0 xslt-grouping


【解决方案1】:

用例如写一个完整的样式表

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

<xsl:key name="group" match="Result/Record" use="AC_CPR"/>

<xsl:template match="Result">
<table>
<tr>
<th>A</th>
<th>B</th>
</tr>
<xsl:for-each select="Record[generate-id() = generate-id(key('group', AC_CPR)[1])]">
<tr>
  <td><xsl:value-of select="AC_CPR"/></td>
  <td><xsl:value-of select="sum(key('group', AC_CPR)/AC_LNA/Row/Column[2])"/></td>
</tr>
</xsl:for-each>
</table>

</xsl:template>

</xsl:stylesheet>

对于sum,我猜你想对每个组求和,而不是对所有节点的完整集。

【讨论】:

  • 你好 Martin,我收到一条错误消息:样式表不包含文档元素。样式表可能是空的,也可能不是格式良好的 XML 文档...
  • 我在 SO 编辑器中输入了代码,忘记关闭标签,我会编辑并更正它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多