【问题标题】:XSLT Grouping Multiple KeysXSLT 对多个键进行分组
【发布时间】:2015-05-09 00:46:46
【问题描述】:

我正在使用 XSLT 1.0 并尝试按我的 XML 中的两个元素进行分组。基本上我想转换以下 XML:

<requirements>
  <item>
    <category>Admin</category>
    <functionality>View Data</functionality>
    <requirement>The system shall do 1</requirement>
  </item>
  <item>
    <category>Admin</category>
    <functionality>View Data</functionality>
    <requirement>The system shall do 2</requirement>
  </item>
  <item>
    <category>Admin</category>
    <functionality>Query Data</functionality>
    <requirement>The system shall do 3</requirement>
  </item>
  <item>
    <category>Admin</category>
    <functionality>Query Data</functionality>
    <requirement>The system shall do 4</requirement>
  </item>
</requirements>

进入这个:

<requirements>
  <item>
    <category>Admin</category>
    <functionality>View Data</functionality>
    <requirement id ="1">The system shall do 1</requirement>
    <requirement id ="2">The system shall do 2</requirement>
  </item>
  <item>
    <category>Admin</category>
    <functionality>Query Data</functionality>
    <requirement id="1">The system shall do 3</requirement>
    <requirement id="2">The system shall do 4</requirement>
  </item>
</requirements>

我只是没有足够的 XSLT 经验来正确实现 Muenchian 方法。

非常感谢任何帮助。

【问题讨论】:

  • 你能解释一下背后的逻辑吗?我能想到的是您正在尝试将itemsfunctionality 分组,requirement 上的@id 具有n 的值nth requirement。请随时在此处发布您的尝试。
  • 试图按两个元素分组”哪两个?
  • @Lingamurthy CS -- 你的解释是正确的。我想我真的无法想象我真正需要什么。

标签: xml xslt


【解决方案1】:

如果您使用连接categoryfunctionality 的键,如&lt;xsl:key name="group" match="item" use="concat(category, '|', functionality)"/&gt;,那么您可以使用正常的Muenchian 分组:

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

<xsl:output indent="yes"/>

<xsl:key name="group" match="item" use="concat(category, '|', functionality)"/>

<xsl:template match="requirements">
  <xsl:copy>
    <xsl:apply-templates select="item[generate-id() = generate-id(key('group', concat(category, '|', functionality))[1])]"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="item">
  <xsl:copy>
    <xsl:copy-of select="category | functionality"/>
    <xsl:apply-templates select="key('group', concat(category, '|', functionality))/requirement"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="requirement">
  <xsl:copy>
    <xsl:attribute name="id"><xsl:value-of select="position()"/></xsl:attribute>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2018-02-20
    相关资源
    最近更新 更多