Преобразование XML в XML, где записи создаются на основе текущих данных и множества значений из списка элементов - PullRequest
2 голосов
/ 13 февраля 2012

Исходный XML:

    <record>
       <protein>AAA</protein>
       <reference>1234</reference>
       <reference>679</reference>
    </record>
    <record>
       <protein>BBB</protein>
       <reference>9876</reference>
    </record>
    <record>
       <protein>CCC</protein>
       <reference>9876</reference>
       <reference>14846</reference>
       <reference>982</reference>
    </record>

Я новичок в использовании XLST и не смог найти решение своей проблемы. Мне нужно специально создать XML-файл, в котором данные в записи делятся на одну или несколько новых записей на основе значений в списке. Обратите внимание, что количество значений в списке (ссылка) сильно варьируется.

Желаемый XML:

    <record>
       <protein>AAA</protein>
       <reference>1234</reference>
    </record>
    <record>
       <protein>AAA</protein>
       <reference>679</reference>
    </record>
    <record>
       <protein>BBB</protein>
       <reference>9876</reference>
    </record>
    <record>
       <protein>CCC</protein>
       <reference>9876</reference>
    </record>
    <record>
       <protein>CCC</protein>
       <reference>14846</reference>
    </record>
    <record>
       <protein>CCC</protein>
       <reference>982</reference>
    </record>

Любая помощь очень ценится.

1 Ответ

1 голос
/ 13 февраля 2012

Мне нужно настроить образец входного XML-файла.

<?xml version="1.0" encoding="UTF-8"?>
<records>
<record>
       <protein>AAA</protein>
       <reference>1234</reference>
       <reference>679</reference>
</record>
<record>
       <protein>BBB</protein>
       <reference>9876</reference>
</record>
<record>
       <protein>CCC</protein>
       <reference>9876</reference>
       <reference>14846</reference>
       <reference>982</reference>
</record>
</records>

Тогда сам XSL может выглядеть так:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xsl:output exclude-result-prefixes="xsl xs" indent="yes"/>
<xsl:template match="/records/record">
    <xsl:for-each select="reference">
        <xsl:element name="record">
           <xsl:element name="protein">
               <xsl:value-of select="../protein/text()"/>
           </xsl:element>
           <xsl:element name="reference">
               <xsl:value-of select="text()"/>
           </xsl:element>
        </xsl:element>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...