xml - 使用 XSLT 1.0 对多个属性进行分组

标签 xml xslt xpath xslt-1.0

输入 XML:

<?xml version="1.0" encoding="ISO-8859-1"?>

<document>
  <section name="foo" p="Hello from section foo" q="f" w="fo1"/>
  <section name="foo" p="Hello from section foo1" q="f1" w="fo1"/>
  <section name="bar" p="Hello from section bar" q="b" w="ba1"/>
  <section name="bar" p="Hello from section bar1" q="b1" w="ba1"/>
</document>

预期输出 XML:

<document>
  <section name="foo" w= "fo1">
      <contain p="Hello from section foo" q="f" />
      <contain p="Hello from section foo1" q="f1" />
  </section>
  <section name="bar" w= "ba1">
      <contain p="Hello from section bar" q="b" />
      <contain p="Hello from section bar1" q="b1" />
  </section>
</document>

我的应用程序只能使用 XSLT 1.0,因此我无法使用 xsl:for-each-group

最佳答案

用途:

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

  <xsl:key name="k" match="section" use="@name"/>
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/document">
    <xsl:copy>
      <xsl:apply-templates select="section[generate-id() = generate-id(key('k', @name))]"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="section">
    <xsl:copy>
      <xsl:copy-of select="@name | @w"/>
      <xsl:for-each select="key('k', @name)">
        <contain p="{@p}" q="{@q}"/>
      </xsl:for-each>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

关于xml - 使用 XSLT 1.0 对多个属性进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11498717/

相关文章:

c# - 使用 C# 反序列化 XML 文件,其中元素具有属性和值

xslt - 如何在 XSLT 中显示一个字符 n 次?

xml - XPath通过id属性获取另一个属性

php - PHP的Javascript函数引发 “Illegally Formed XML Syntax”错误

Java Stax Iterator API方法实现

c# - XPath:从非根节点选择失败

xml - XSLT - 匹配其中包含特定节点的节点(如 jQuery ":has")

xml - 使用 Xpath 进行 XSLT 处理的说明

mysql - 如何使用 XML_LOAD() 将 XML 文件导入 MySQL 数据库表;功能

java - 使用 java 对输入 XML 进行 XSL 转换