2015-10-13 18 views
1

我想要在這裏,我希望把所有的值與標籤<beschreibung>...</beschreibung>用相同的ID從我所面對的標籤<rissko>...</risiko>無法擺脫multible元素的所有值XSLT

問題這裏,我不得不用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(中順序無關緊要)

Ans WER:

<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

我不明白你的問題。請顯示您的示例的預期結果,並通過「*標記 ...中的所有值使用來自標記 ... *」的相同ID解釋您的確切含義。如果我不得不猜測,我會說這是一個*分組問題。已經發布了許多例子 - 搜索* Muenchian分組*。 –

回答

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> 

所以我只需要得到節點文本的值