Вот пример XML.XSLT 1.0 выберите элементы в Quiz XML
<Root>
<Story>
<body>
<quiz>1</quiz>How to select that rightanswer from another Story ?
</body>
<answer>answer1-1</answer>
<answer>answer1-2</answer>
<answer>answer1-3</answer>
<body>
<quiz>2</quiz>And how to push these <qitem/>s into <qitems/> ?
</body>
<answer>answer2-1</answer>
<answer>answer2-2</answer>
<answer>answer2-3</answer>
<answer>answer2-4</answer>
</Story>
<Story>
<h3>RIGHT_ANSWERS</h3>
<rightanswer>
RightAnswer1 IDK
</rightanswer>
<rightanswer>
RightAnswer2 IDK
</rightanswer>
</Story>
</Root>
Ожидаемый результат:
<Root>
<Story>
<quiz>
<qitems>
<qitem>
<question>
<qtitle>1</qtitle>
<qtext>How to select that rightanswer from another Story ?</qtext>
</question>
<answers>
<answer>answer1-1</answer>
<answer>answer1-2</answer>
<answer>answer1-3</answer>
</answers>
<rightanswer>RightAnswer1 IDK</rightanswer>
</qitem>
<qitem>
<question>
<qtitle>2</qtitle>
<qtext>And how to push these <qitem/>s into <qitems/> ?</qtext>
</question>
<answers>
<answer>answer2-1</answer>
<answer>answer2-2</answer>
<answer>answer2-3</answer>
<answer>answer2-4</answer>
</answers>
<rightanswer>RightAnswer2 IDK</rightanswer>
</qitem>
</qitems>
</quiz>
</Story>
</Root>
Все, что я смог сделать, это положить каждый body[quiz]
и следующим его брат и сестра по имени answer
в <qitem>
элемент и застрял на толкая эти <qitem>s
в родителю <qitems>
и выбор <rightanswer>
. До сих пор у меня есть этот XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="body[quiz]" >
<qitem>
<question>
<qtitle>
<xsl:value-of select="quiz" />
</qtitle>
<qtext>
<xsl:apply-templates select="node()" />
</qtext>
</question>
<answers>
<xsl:apply-templates select="following-sibling::*[1][self::answer]" mode="following" />
</answers>
<rightanswer></rightanswer>
</qitem>
</xsl:template>
<xsl:template match="answer" mode="following">
<answer>
<xsl:apply-templates select="node()" />
</answer>
<xsl:apply-templates select="following-sibling::*[1][self::answer]" mode="following" />
</xsl:template>
<xsl:template match="body/quiz" />
<xsl:template match="answer" />
<xsl:template match="h3"/>
</xsl:stylesheet>
Проверьте это: http://xsltransform.net/nc4NzQr
Отлично! Благодаря! Оно работает. Эти избыточные обертки необходимы, чтобы преобразовать их дальше в XHTML. Еще раз спасибо. – sprut