Member 13157812 Ответов: 0

XSLT группировка плоский XML


Мне нужно сгруппировать данные на основе элемента и заполнить их.

ниже упоминается входной xml, и если вы видите, что есть 4 строки для P, а затем начинается элемент Head, то мне нужно сгруппироваться со следующими P.

Мне нужно преобразовать это-

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <row id="j1">
        <name>Marcus C.</name>
        <P id="j1_p1">[1] Text</P>
        <P id="j1_p2">[2] Text</P>
        <P id="j1_p3">[3] Text</P>
        <P id="j1_p4">[4] Text</P>
        <Head hlevel="h1">
            <Emph type="b">Facts</Emph>
        </Head>
        <P id="j1_p5">[5] Text</P>
        <P id="j1_p6">[6] Text</P>
        <P id="j1_p7">[7] Text</P>
        <Head hlevel="h1">
            <Emph type="b">Trial</Emph>
        </Head>
        <P id="j1_p8">[8] Text</P>
        <P id="j1_p9">[9] Text</P>
        <P id="j1_p10">[10] Text</P>
    </row>
</root>



Желаемым результатом будет :

<root>
    <row id="j1">
        <name>Marcus C.</name>
        <P id="j1_p1">[1] Text</P>
        <P id="j1_p2">[2] Text</P>
        <P id="j1_p3">[3] Text</P>
        <P id="j1_p4">[4] Text</P>
        <Group>
            <Head hlevel="h1">
                <Emph type="b">Facts</Emph>
            </Head>
            <P id="j1_p5">[5] Text</P>
            <P id="j1_p6">[6] Text</P>
            <P id="j1_p7">[7] Text</P>
        </Group>
        <Group>
            <Head hlevel="h1">
                <Emph type="b">Trial</Emph>
            </Head>
            <P id="j1_p8">[8] Text</P>
            <P id="j1_p9">[9] Text</P>
            <P id="j1_p10">[10] Text</P>
        </Group>
    </row>
</root>


Спасибо.

Что я уже пробовал:

<xsl:template match="row/Head[child::Emph]">
   <Group>
       <Head>
           <xsl:apply-templates />
       </Head>
   </Group>
 </xsl:template>

0 Ответов