首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用XSLT,如何根据节点的值分隔节点?

使用XSLT,如何根据节点的值分隔节点?
EN

Stack Overflow用户
提问于 2010-03-25 23:30:05
回答 6查看 331关注 0票数 0

我有一个非常扁平的XML结构,我需要将其重新排序到分类的部分中,而且,在我的一生中,我不知道如何在XSLT中做到这一点(并不是说我是专家)。

基本上,原始的XML看起来有点像:

代码语言:javascript
运行
复制
<things>
  <thing>
    <value>one</value>
    <type>a</type>
  </thing>
  <thing>
    <value>two</value>
    <type>b</type>
  </thing>
  <thing>
    <value>thee</value>
    <type>b</type>
  </thing>
  <thing>
    <value>four</value>
    <type>a</type>
  </thing>
  <thing>
    <value>five</value>
    <type>d</type>
  </thing>
</things>

我需要输出如下内容:

代码语言:javascript
运行
复制
<data>
  <a-things>
    <a>one</a>
    <a>four</a>
  </a-things>
  <b-things>
    <b>two</b>
    <b>three</b>
  </b-things>
  <d-things>
    <d>five</d>
  </d-things>
</data>

注意,如果没有任何<c>元素,我就不能输出<c-things>,但是我提前知道完整的类型列表是什么,而且它相当短,所以为每种类型手工编写模板绝对是可能的。我觉得我可以用<xsl:if><xsl:for-each>一起破解一些东西,但我也觉得必须有更多的……“‘templatey”的方式。有人能帮上忙吗?

干杯。

EN

Stack Overflow用户

发布于 2010-03-25 23:52:38

代码语言:javascript
运行
复制
<a-things>
    <xsl:for-each select="thing[type = 'a']">
        <a><xsl:value-of select="./value" /></a>
    </xsl:for-each>
</a-things>

如果你想变得更时髦,用参数替换<a-things>和谓词,并使用属性值模板:

代码语言:javascript
运行
复制
<xsl:param name="type" />
<xsl:element name="{$type}-things">
    <xsl:for-each select="thing[type = $type]">
        <xsl:element name="{$type}"><xsl:value-of select="./value" /></xsl:element>
    </xsl:for-each>
</xsl:element>
票数 0
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2516869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档