Я все еще начинающий с XSLT, но передо мной стоит сложная задача.
У меня есть не XML-файл, который необходимо преобразовать. Формат файла следующий:
type1
type1line1
type1line2
type1line3
type2
type2line1
type2line2
type3
type3line1
type3line2
типы (type1, type2, ...
) указываются с использованием определенных кодов, которые не имеют определенного порядка. Каждый тип имеет несколько line
внизу.
Итак, мне нужно преобразовать этот файл, но проблема в том, что для каждого type
мне нужно выполнить разные преобразования для каждой из его базовых строк.
Теперь я могу читать строку за строкой и определять, что новый тип начался, но я не знаю, как установить флаг (указывающий тип), чтобы использовать его в нижележащих строках.
Вот что у меня сейчас есть:
<?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" version="2.0">
<xsl:param name="testString" as="xs:string">
type1
line1
line2
type1
line1
</xsl:param>
<xsl:template match="/">
<xsl:call-template name="main">
<xsl:with-param name="testString" select="$testString"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="main">
<xsl:param name="testString"/>
<xsl:variable name="iniFile" select="$testString"/>
<config>
<xsl:analyze-string select="$iniFile" regex="\n">
<xsl:non-matching-substring>
<item>
<xsl:choose>
<xsl:when test="starts-with(., 'type1')">
<!-- do a specific transformation-->
</xsl:when>
<xsl:when test="starts-with(., 'type2')">
<!-- do another transformation-->
</xsl:when>
</xsl:choose>
</item>
</xsl:non-matching-substring>
</xsl:analyze-string>
</config>
</xsl:template>
</xsl:stylesheet>
Любая идея о том, как решить проблему.