Po wypróbowaniu przez ponad 8 godzin, mam nadzieję, że ktoś może mi pomóc z tym:Jak to przodek gałąź węzła wybranego przez parametr XPath w wyjściu XSLT
otrzymuje następujące (uproszczony) XML do książki:
<book>
<section name="A">
<chapter name="I">
<paragraph name="1"/>
<paragraph name="2"/>
</chapter>
<chapter name="II">
<paragraph name="1"/>
</chapter>
</section>
<section name="B">
<chapter name="III"/>
<chapter name="IV"/>
</section>
</book>
Jestem w stanie wyodrębnić każdą część (rozdział, rozdział lub akapit) z książki opartej na XML danego parametru z następującym xsl:
<xsl:param name="subSelectionXPath" required="yes" as="node()"/>
<xsl:template match="/">
<xsl:apply-templates select="$subSelectionXPath"/>
</xsl:template>
<xsl:template match="*">
<!-- output node with all children -->
<xsl:copy-of select="."/>
</xsl:template>
a parametr $ subSelectionXPath z wartością jak
doc(filename)//chapter[@name='II']
powodując wyjścia:
<chapter name="II">
<paragraph name="1"/>
</chapter>
co chcę osiągnąć dodatkowo ma mieć wybrany fragment XML otoczone przodek XML oddziału, tj:
<book>
<section name="A">
<chapter name="II">
<paragraph name="1"/>
</chapter>
</section>
</book>
sobie wyobrazić (i próbował) przemierza drzewo XML i testowania, czy bieżący węzeł jest przodkiem, coś jak (pseudo kod):
<xsl:if test="node() in $subSelectionXPath/ancestor::node()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:if>
Eksperymentowałem również z xsl: key, ale obawiam się, że moja wiedza na temat XSLT dobiega końca. jakieś pomysły?
więc, biorąc pod uwagę element wejściowy, chcesz skopiować z powrotem do jego przodków i wyjście elementu z przodków, bez rodzeństwa, mam rację? –
Dobre pytanie, +1. Zobacz moją odpowiedź na kompletne, krótkie i łatwe rozwiązanie XSLT 2.0. –
Dodałem także szczegółowe wyjaśnienie. –