Это еще один вопрос, что я отправил на xslt move node inside sibling nodeXSLT перемещение узла внутри родственный узла части 2
Это мой вход:
<div class="a" >aaa
<div class="b">b1</div>
<div class="c">b1c1</div>
<div class="d">b1d1</div>
<div class="d">b1d2</div>
<div class="b">b2</div>
<div class="c">b2c1</div>
<div class="d">b2d1</div>
<div class="d">b2d2</div>
<div class="d">b2d3</div>
<div class="b">b3</div>
<div class="c">b3c1</div>
<div class="d">b3d1</div>
</div>
и это выход, я хотел бы получить:
<div class="a" >aaa
<div class="b">b1
<div class="c">b1c1</div>
<div class="d">b1d1</div>
<div class="d">b1d2</div>
</div>
<div class="b">b2
<div class="c">b2c1</div>
<div class="d">b2d1</div>
<div class="d">b2d2</div>
<div class="d">b2d3</div>
</div>
<div class="b">b3
<div class="c">b3c1</div>
<div class="d">b3d1</div>
</div>
</div>
Единственное отличие от предыдущей проблемы заключается в том, что имеет значение, то есть aaa.
Я использую следующие: XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="b" match="div[@class!='b']" use="generate-id(preceding-sibling::div[@class='b'][1])" />
<!-- Identity template, copies everything as is -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- Override for target element -->
<xsl:template match="div[@class='a']">
<xsl:copy>
<xsl:apply-templates select="@*|div[@class='b']"/>
</xsl:copy>
</xsl:template>
<xsl:template match="div[@class='b']">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<xsl:apply-templates select="key('b', generate-id())" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Но это дает мне следующий результат, то есть "ааа" (после того, как класс деления = "а") исчез :(
<div class="a" >
<div class="b">b1
<div class="c">b1c1</div>
<div class="d">b1d1</div>
<div class="d">b1d2</div>
</div>
<div class="b">b2
<div class="c">b2c1</div>
<div class="d">b2d1</div>
<div class="d">b2d2</div>
<div class="d">b2d3</div>
</div>
<div class="b">b3
<div class="c">b3c1</div>
<div class="d">b3d1</div>
</div>
</div>
что я делаю неправильно? Я благодарю вас за вашу помощь.
Еще раз спасибо Тим! Я изучаю все xslt на примере, только за последнюю неделю. Я должен, возможно, прочитать хорошую книгу или веб-сайт по этому поводу. У вас есть рекомендации для меня? PS Я пытаюсь проголосовать за ваши ответы, но я получаю сообщение о том, что моя «репутация» по-прежнему слишком низка для моих голосов:/ – Yalmar
Хотя вопрос закрыт (потому что, строго говоря, тема для StackOverflow), вы можете посмотреть http://stackoverflow.com/questions/3511759/where-can-i-find-a-good-tutorial-on-xslt-files, так как содержит ссылку на номер ресурсов и рекомендаций для книг. –
Спасибо Тим. Я посмотрю на это. – Yalmar