0

XSLT を使用して次のことを行う方法を見つけるのに苦労しています。助けてくれてありがとう。RJ

入力:

<root>
    <a>a1</a>
    <b>b1</b>
    <c>c1</c>
    <a>a2</a>
    <b>b2</b>
    <c>c2</c>
    ...
</root>

出力:

<root>
    <item>
        <a>a1</a>
        <b>b1</b>
        <c>c1</c>
    </item>
    <item>
        <a>a2</a>
        <b>b2</b>
        <c>c2</c>
    </item>
    ...
</root>
4

2 に答える 2

2

グループの最初の要素として要素を使用して要素を「アイテム」に「グループ化」する場合、1つの方法は、 xsl:keyを使用して、要素の最初に先行する要素で要素をグループ化することです。

<xsl:key name="items" match="root/*" use="generate-id(preceding-sibling::a[1])" />

次に、要素を単純に照合し、キーで検索されたすべての要素をコピーできます

<xsl:copy-of select="key('items', generate-id())" />

これが完全なXSLTです

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>
   <xsl:key name="items" match="root/*" use="generate-id(preceding-sibling::a[1])" />

   <xsl:template match="/root">
      <root>
         <xsl:apply-templates select="@*"/>
         <xsl:apply-templates select="a" />
      </root>
   </xsl:template>

   <xsl:template match="a">
      <item>
         <xsl:copy-of select="." />
         <xsl:copy-of select="key('items', generate-id())" />
      </item>
   </xsl:template>
</xsl:stylesheet>

サンプルXMLに適用すると、次のように出力されます。

<root>
   <item>
      <a>a1</a>
      <b>b1</b>
      <c>c1</c>
      <a>a2</a>
   </item>
   <item>
      <a>a2</a>
      <b>b2</b>
      <c>c2</c>
   </item>
</root>
于 2012-08-22T09:26:19.003 に答える
0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="text()"/>

    <xsl:template match="/root">
        <root>
            <xsl:apply-templates/>
        </root>
    </xsl:template>
    <xsl:template match="a">
        <item>
            <a><xsl:value-of select="text()"/></a>
            <b><xsl:value-of select="following-sibling::b/text()"/></b>
            <c><xsl:value-of select="following-sibling::c/text()"/></c>
        </item>
    </xsl:template>
</xsl:stylesheet>
于 2012-08-22T08:26:12.713 に答える