我在这里尝试的是,我想将标记<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>
我宁愿不使用muenchian分组
答案 0 :(得分: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>
所以我只需要获取节点文本的值