невозможно получить все значения из многослойных элементов xslt

то, что я пытаюсь здесь, это то, что я хочу положить все значения из тега <beschreibung>...</beschreibung> с тем же идентификатором из тега <rissko>...</risiko>

Проблема, с которой я здесь сталкиваюсь, заключается в том, что мне нужно было определить переменную с правильным форматом вывода в xslt-1.0, и теперь я могу просто получить первое значение из каждого элемента с таким же <risiko/>

Ввод-XML:

 <damages>
<Element name="0">
<risiko>/db/so/si/GebaeudeSchadenWasser.xml</risiko>
<schaden>200</schaden>
<beschreibung>wasser</beschreibung>
</Element>
<Element name="1">
<risiko>/db/so/si/GebaeudeSchadenFeuer.xml</risiko>
<schaden>200</schaden>
<beschreibung>feuer 1</beschreibung>
</Element>
<Element name="2">
<risiko>/db/so/si/GebaeudeSchadenElementar.xml</risiko>
<schaden>200</schaden>
<beschreibung>elementar 2</beschreibung>
</Element>
<Element name="3">
<risiko>/db/so/si/GebaeudeSchadenElementar.xml</risiko>
<schaden>200</schaden>
<beschreibung>elementar 3</beschreibung>
</Element>
<Element name="4">
<risiko>/db/so/si/GebaeudeSchadenElementar.xml</risiko>
<schaden>200</schaden>
<beschreibung>elementar 1</beschreibung>
</Element>
<Element name="5">
<risiko>/db/so/si/GebaeudeSchadenGlas.xml</risiko>
<schaden>200</schaden>
<beschreibung>glas</beschreibung>
</Element>
<Element name="6">
<risiko>/db/so/si/GebaeudeSchadenFeuer.xml</risiko>
<schaden>200</schaden>
<beschreibung>feuer 2</beschreibung>
</Element>
<Element name="7">
<risiko>/db/so/si/GebaeudeSchadenSturm.xml</risiko>
<schaden>300</schaden>
<beschreibung>sturm</beschreibung>
</Element>
</damages>

Переменная XSL:

<xsl:variable name="damage">
<damage>
<xsl:if test="$iVorschadenFeuer">
<R>
<riskid>
<xsl:value-of select="'/db/so/si/GebaeudeSchadenFeuer.xml'" />
</riskid>
<id>
<xsl:value-of select="'1'" />
</id>
<gefahrbasis>
<xsl:value-of select="'F'" />
</gefahrbasis>
</R>
</xsl:if>
<xsl:if test="$iVorschadenWasser">
...
</xsl:if>
<xsl:if test="$iVorschadenSturm">
...
</xsl:if>
</damage>

Шаблон с выходной структурой:

     <xsl:template match="R">
<xsl:variable name="aktrisk" select="riskid" />
<xsl:variable name="aktid" select="id" />
<sach:Vorschaden>
<vs-pm:AnzahlVorschaeden>
<xsl:value-of select="count($iDamages[risiko = $aktrisk])" />
</vs-pm:AnzahlVorschaeden>
<vs-pm:Beschreibung>
<xsl:choose>
<xsl:when test="$iDamages[risiko = $aktrisk]/beschreibung != ''">
<xsl:for-each select="$iDamages[risiko = $aktrisk]">
<xsl:value-of select="$iDamages[risiko = $aktrisk]/beschreibung" />
<xsl:value-of select="'/ '" />
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'Keine Angaben'" />
</xsl:otherwise>
</xsl:choose>
</vs-pm:Beschreibung>
<vs-pm:DeckungID xsi:type="dt:STE_DeckungBasis">
<xsl:value-of select="$aktid" />
</vs-pm:DeckungID>
<xsl:if test="gefahrbasis">
<vs-pm:Gefahr xsi:type="dt:STE_GefahrBasis">
<xsl:value-of select="gefahrbasis" />
</vs-pm:Gefahr>
</xsl:if>
<vs-pm:Schadenhoehe>
<allg:Betrag>
<xsl:value-of select="sum($iDamages[risiko = $aktrisk]/schaden)" />
</allg:Betrag>
<allg:Waehrung>
<xsl:value-of select="'EUR'" />
</allg:Waehrung>
</vs-pm:Schadenhoehe>
</sach:Vorschaden>

проблема здесь заключается в $iDamages[risiko = $aktrisk]/beschreibung я просто получаю elementar 2 3 раза, но я хочу, чтобы это было как elementar 2/ elementar 3/ elementar 1 (порядок не имеет значения)

Ответ:

<sach:Vorschaden>
<vs-pm:AnzahlVorschaeden>3</vs-pm:AnzahlVorschaeden>
<vs-pm:Beschreibung>elementar 1/ elementar 2/ elementar 3</vs-pm:Beschreibung>
<vs-pm:DeckungID xsi:type="dt:STE_DeckungBasis">1</vs-pm:DeckungID>
<vs-pm:Gefahr xsi:type="dt:STE_GefahrBasis">F</vs-pm:Gefahr>
<vs-pm:Schadenhoehe>
<allg:Betrag>300</allg:Betrag>
<allg:Waehrung>EUR</allg:Waehrung>
</vs-pm:Schadenhoehe>
</sach:Vorschaden>

я бы предпочел не использовать мюнхенскую группировку

1

Решение

Я нашел способ генерировать правильный вывод

Я должен был добавить другой тег <text>...</text> к переменной $damage

теперь это выглядит так:

<xsl:variable name="damage">
<damage>
<xsl:if test="$iVorschadenFeuer">
<R>
<riskid>
<xsl:value-of select="'/db/so/si/GebaeudeSchadenFeuer.xml'" />
</riskid>
<id>
<xsl:value-of select="'1401'" />
</id>
<gefahrbasis>
<xsl:value-of select="'F'" />
</gefahrbasis>
<text>
<xsl:for-each select="$iVorschadenFeuer">
<xsl:value-of select="beschreibung" />
<xsl:if test="position() != last()">
<xsl:value-of select="', '" />
</xsl:if>
</xsl:for-each>
</text>
</R>
</xsl:if>

так что мне просто нужно получить значение текста узла

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]