Перевод XSLT - PullRequest
       16

Перевод XSLT

0 голосов
/ 02 марта 2011

Я пытаюсь преобразовать из одного XML в другой

вход

<Surcharge>
  <CommercialVehicle desc="Commercial Vehicle">395.00</CommercialVehicle> 
  <EnhancedElectrical desc="Enhanced Electrical">395.00</EnhancedElectrical> 
  <AirConditioningHeating desc="Air Conditioning/Heating">395.00</AirConditioningHeating> 
</Surcharge>

желаемый выход

<Options>
 <Option>
  <OptionId>0</OptionId> 
  <OptionDesc>Commercial Vehicle</OptionDesc> 
  <OptionName>Commercial Vehicle</OptionName> 
  <RetailRate>395.00</RetailRate> 
  <NetRate>395.00</NetRate> 
  <IsSurcharge>false</IsSurcharge> 
  </Option>
 <Option>
  <OptionId>0</OptionId> 
  <OptionDesc>Enhanced Electrical</OptionDesc> 
  <OptionName>Enhanced Electrical</OptionName> 
  <RetailRate>395.00</RetailRate> 
  <NetRate>395.00</NetRate> 
  <IsSurcharge>false</IsSurcharge> 
  </Option>
....
</Options>

Я использую следующие XSL

<Options>
  <xsl:for-each select="//Rate[(CvCvty = $vProg) and (MonthTerm=$vMonthTerm) and (MileageTerm=$vMileageTerm) and (Deductible=$vDeductible)]/Surcharge">
    <xsl:choose>
      <xsl:when test="string-length(.//@desc)>0">
        <Option>
          <OptionId>0</OptionId>
          <OptionDesc>
            <xsl:value-of select=".//@desc"/>
          </OptionDesc>
          <OptionName>
            <xsl:value-of select=".//@desc"/>
          </OptionName>
          <RetailRate>
            <xsl:value-of select="."/>
          </RetailRate>
          <NetRate>
            <xsl:value-of select="."/>
          </NetRate>
          <IsSurcharge>false</IsSurcharge>
        </Option>
      </xsl:when>
    </xsl:choose>
  </xsl:for-each>
</Options>

Но каким-то образом я получаю этот вывод, может кто-нибудь помочь мне выяснить, что должно быть изменено

<Options>
 <Option>
  <OptionId>0</OptionId> 
  <OptionDesc>Commercial Vehicle</OptionDesc> 
  <OptionName>Commercial Vehicle</OptionName> 
  <RetailRate>395.00395.00395.00</RetailRate> 
  <NetRate>395.00395.00395.00</NetRate> 
  <IsSurcharge>false</IsSurcharge> 
  </Option>
</Options>

Спасибо

1 Ответ

1 голос
/ 02 марта 2011

Ваш foreach выбирает только один дополнительный элемент, вам нужно изменить его, чтобы выбрать дочерние узлы, поставив / * в конце.

Это создаст контекст для интересующего вас элементапоэтому вы должны использовать @desc вместо синтаксиса .//@desc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...