2014-12-14 3 views
0

У меня есть следующий XML, который дал мне и который я передаю в моей XSLT для целей трансформации ..Получение значения атрибута из XML с помощью XPath различного

<Report xmlns:fpml="http://www.fpml.org/FpML-5/confirmation" 
    xmlns="http://www.eurexchange.com/EurexIRSFullInventoryReport" 
    name="CB202 Full Inventory Report"> 
    <reportNameGrp> 
     <CM> 
      <acctTypGrp name="A4"> 
       <ProductType name="Swap"> 
        <currTypCod value="EUR"> 
         <rateIndex name="EURIBOR"> 
          <rateIndexTenor name="6M"> 
           <idxSource>EURIBOR01</idxSource> 
          </rateIndexTenor> 
         </rateIndex> 
        </currTypCod> 
        <currTypCod value="GBP"> 
         <rateIndex name="LIBOR"> 
          <rateIndexTenor name="1Y"> 
           <idxSource>LIBOR01</idxSource> 
          </rateIndexTenor> 
         </rateIndex> 
        </currTypCod> 
       </ProductType> 
      </acctTypGrp> 
     </CM> 
    </reportNameGrp> 
</Report> 

я разработал следующий XSLT для этого , который я позже буду использовать для целей преобразования. В приведенном ниже XSLT Я пытаюсь получить значения из приведенного выше XML:

<xsl:stylesheet version="1.0" xmlns:fpml="http://www.fpml.org/FpML-5/confirmation" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:eur="http://www.eurexchange.com/EurexIRSFullInventoryReport"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" /> 
    <xsl:template match="/eur:Report"> 
     <Eurexflows> 
      <xsl:apply-templates select="eur:reportNameGrp/eur:CM/eur:acctTypGrp/eur:ProductType/eur:currTypCod/eur:rateIndex/eur:rateIndexTenor" /> 
     </Eurexflows> 
    </xsl:template> 
    <xsl:template match="eur:rateIndexTenor"> 
     <EurexMessageObject> 
      <CCPTradeId><xsl:value-of select="eur:CCPTradeId/@id" /></CCPTradeId> 
      <novDateTime><xsl:value-of select="eur:CCPTradeId/eur:novDateTime" /></novDateTime> 
      <feename><xsl:value-of select="eur:CCPTradeId/eur:feeType/@name"/></feename> 
      <feePayAmnt><xsl:value-of select="eur:CCPTradeId/eur:feeType/eur:feePayAmnt"/></feePayAmnt> 
      <feeCurrTypCod><xsl:value-of select="eur:CCPTradeId/eur:feeType/eur:feeCurrTypCod"/></feeCurrTypCod> 
      <feeDate><xsl:value-of select="eur:CCPTradeId/eur:feeType/eur:feeDate"/></feeDate> 
      <idxSource><xsl:value-of select="eur:idxSource"/></idxSource> 
      <rateIndexTenorname><xsl:value-of select="@name"/></rateIndexTenorname> 
      <rateIndexname> 
       <!--<xsl:value-of select="eur:report/eur:reportNameGrp/eur:CM/eur:acctTypGrp/@name/eur:ProductType/@name"/>--> 
       <xsl:for-each select="eur:report/eur:reportNameGrp/eur:CM/eur:acctTypGrp/eur:ProductType/eur:currTypCod"> 
        <xsl:value-of select="eur:rateIndex/@name" /> 
       </xsl:for-each> 
      </rateIndexname> 
     </EurexMessageObject> 
    </xsl:template> 
</xsl:stylesheet> 

Теперь, как вы можете видеть, что в выше XSL я хочу, чтобы получить значение атрибута <rateIndex name>, не наступающем идеально. Значение <rateIndexname> должно быть EURIBOR, LIBOR.

Просьба сообщить, как я могу получить значение атрибута name на элементе rateIndex. Пожалуйста, объясните, что пошло не так в моем XPath, примененном в моем XSLT.

ответ

0

В вашем шаблоне вы в настоящее время находитесь на элементе rateIndexTenor. rateIndex вы хотите получить имя для этого родителя. Таким образом, вы могли бы использовать это выражение, чтобы заменить xsl:for-each, который ненужно здесь, так как есть только один родитель:

<xsl:value-of select="parent::eur:rateIndex/@name"/> 

Это может быть упрощено до этого, где .. это стенография для родительского узла.

<xsl:value-of select="../@name"/> 
Смежные вопросы