Я борюсь с XSLT в течение нескольких часов, и я пришел в StackOverflow для получения справки. У меня есть некоторые ввода текста, как это:Группировка некоторых элементов XML с помощью XSLT
<?xml version="1.0" encoding="UTF-8"?>
<div>
<p class="text">Some regular text</p>
<p class="first">The first part</p>
<p class="next">and then some text</p>
<p class="next">and some more</p>
<p class="regular">Some regular text</p>
<p class="text1">Some regular text</p>
<p class="text2">Some regular text</p>
<p class="first">Here some new text</p>
<p class="next">and some more</p>
<p class="next">and the end of this section</p>
<p class="text3">Some regular text</p>
</div>
Я хотел бы закончить с этим
<?xml version="1.0" encoding="UTF-8"?>
<div>
<p>Some regular text</p>
<group>
<p>The first part</p>
<p>and then some text</p>
<p>and some more</p>
</group>
<p>Some regular text</p>
<p>Some regular text</p>
<p>Some regular text</p>
<group>
<p>Here some new text</p>
<p>and some more</p>
<p>and the end of this section</p>
</group>
<p>Some regular text</p>
</div>
Я знаю, что это не удивительно трудно, но я не понимаю ... The XSLT у меня прямо сейчас:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<xsl:apply-templates select="*" />
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:copy />
</xsl:for-each>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="div">
<lg>
<xsl:apply-templates/>
</lg>
</xsl:template>
<xsl:template match="/div">
<xsl:for-each-group select="//p[@class='first']/following-sibling::p[@class='next']" group-by="text()">
<group>
<xsl:apply-templates/>
</group>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
это не работает вообще :(Я был бы очень признателен, если кто-то может мне помочь, потому что у меня действительно есть проблемы с пониманием того, как работает XSLT ...
С наилучшими пожеланиями, Хосе
Привет Тим, спасибо за ответ !! Насколько я понимаю, вы выбираете это p, определяя их отрицательным образом: те p, которые не имеют никакого класса. Можем ли мы попробовать это положительно? Итак, выберите этот элемент с этим конкретным классом? Я попытался, если бы это вызвало удивление, это не сработало –
Я отредактировал вход xml, чтобы лучше его покрыть –
Я обновил свой ответ двумя возможными XSLT, которые вы можете попробовать. –