Доброго времени суток.
Есть такая задача:
В главном xsl подключается множество других мелких xsl, количество которых неограниченно. Нужно вывести информацию из каждого мелкого xsl, заключенного в определенном шаблоне шаблоне. Есть такой пример:
main.xml:
| Код | <?xml version="1.0" encoding="UTF-8"?> <root> Bad Hello!! :-( <element> Very Bad Hello!! :-(( </element> </root>
|
main.xsl:
| Код | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:str="http://example.com/namespace" version="2.0" exclude-result-prefixes="str"> <xsl:import href="first.xsl"/> <xsl:import href="second.xsl"/> <xsl:output method="text"/> <xsl:template match="/"> <xsl:apply-templates select="." mode="hello"/> </xsl:template> <xsl:template match="/" mode="hello"> <xsl:text>Main Hello! </xsl:text> <xsl:next-match/> </xsl:template> </xsl:transform>
|
first.xsl:
| Код | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:str="http://example.com/namespace" version="2.0" exclude-result-prefixes="str"> <xsl:output method="text"/> <xsl:template match="/" mode="hello"> <xsl:text>First Hello! </xsl:text> <xsl:next-match/> </xsl:template> </xsl:transform>
|
second.xsl:
| Код | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:str="http://example.com/namespace" version="2.0" exclude-result-prefixes="str"> <xsl:output method="text"/> <xsl:template match="/" mode="hello"> <xsl:text>Second Hello! </xsl:text> <xsl:next-match/> </xsl:template> </xsl:transform>
|
После прогона через Saxon9 (java net.sf.saxon.Transform -s:main.xml -xsl:main.xsl -o:main.txt) выводится следующее
| Код | Main Hello! Second Hello! First Hello!
Bad Hello!! :-( Very Bad Hello!! :-((
|
Как я понял, при использовании <xsl:next-match/> преобразование переходит на следующий похожий шаблон и после последнего шаблона с mode="hello" он просто выплевывает текстовое содержимое узлов, чего не очень хочется. Вопрос: Как этого избежать?
Может кто сталкивался с данной проблемой и решил ее или же имеет другое решение.. Заранее спасибо =) |