- PR -

xsltで複数のノードをまとめる

1
投稿者投稿内容
しゅう
会議室デビュー日: 2004/02/07
投稿数: 7
投稿日時: 2004-12-26 17:51
xsltでの変換について教えていただきたいことがあります。
以下のような変換が行いたいのですが、どのようにすればよろしいでしょうか?
よろしくお願いいたします。

[変換前]
コード:
<root>

<node name="name1" value="aa" />
<node name="name1" value="bb" />
<node name="name2" value="cc" />
<node name="name2" value="dd" />
<node name="name2" value="ee" />
</root>



[変換後]
コード:
<root>

<node name="name1">
<nodevalue value="aa" />
<nodevalue value="bb" />
</node>
<node name="name2">
<nodevalue value="cc" />
<nodevalue value="dd" />
<nodevalue value="ee" />
</node>
</root>



[ メッセージ編集済み 編集者: しゅう 編集日時 2004-12-26 17:52 ]

[ メッセージ編集済み 編集者: しゅう 編集日時 2004-12-26 17:52 ]
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2004-12-26 21:06
るぱんです。

自分なりにやってみました?
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-12-26 22:35
質問内容を 表現する 用語を ひらめくか どうかです
(質問を作れるかどうか)
xslt 要素の集約
で検索、
あとは自分の問題との、「構造の対応」を付けられるかどうかです。「アナロジーの力」

XSLT2.0 では 、もっと簡単にできると思います、
グループを distinct して それで select。
勧告間近(?)なので、先行β実装が色々出ているでしょう。
単体なら、アルトバの物もあります。
Altova XSLT 2.0 Engine 2005
http://www.altova.com/components_processors.html

[ メッセージ編集済み 編集者: MMX 編集日時 2004-12-27 09:56 ]
しゅう
会議室デビュー日: 2004/02/07
投稿数: 7
投稿日時: 2004-12-27 01:17
>るぱん様
自分なり試行錯誤していましたが、現在の知識ではどうにもなりませんでした。
何かヒントがいただければと思い、投稿させていただきました。

>MMX様
「要素の集約」。まさに、その通りだと思いました。
大きなヒントをありがとうございました。

お二方とも、このような基本的な質問の上、既に同じような質問があったにもかかわらず、返信していただきありがとうございました。
おかげで何とか解決できました。
本当にありがとうございました。

コード:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output indent="yes" />
  <xsl:key name="name" match="node" use="@name" />

  <xsl:template match="root">
    <root>
      <xsl:for-each select="node[not(@name = preceding-sibling::node/@name)]">
        <node name="{@name}">
          <xsl:for-each select="key('name', @name)">
            <nodevalue value="{@value}" />
          </xsl:for-each>
        </node>
      </xsl:for-each>
    </root>
  </xsl:template>

1

スキルアップ/キャリアアップ(JOB@IT)