2016-08-18 11 views
0

我想從使用提供機器生成的酒店信息值的外部遺留Web服務接收的數據中使用XSLT來填充xml。他們提供的酒店的下劃線元素名稱和數字如下所示 例如HotelName_1,HotelName_2等我如何將這些字段名稱與下劃線映射到我的元素?使用傳統Web服務中的XSLT映射到對象集合

<!-- Web Service Results.. part of a larger schema, machine generated...--> 
    <Hotel_Info> 
      <Hotel_1> 
      <HotelName_1>La Quinta Inn</HotelName> 
      <HotelAddressLine1Text_1>552 12th Street West</HotelAddressLine1Text> 
      <HotelCityName>Dickinson_1</HotelCityName> 
      <HotelStateCode_1>ND</HotelStateCode> 
      <HotelZip5Code_1>58601</HotelZip5Code> 
      <HotelZip4Code_1>099</HotelZip4Code> 
      </Hotel_1> 
      <Hotel_2> 
      <HotelName_2></HotelName> 
      <HotelAddressLine1Text_2>3803 13th Ave S</HotelAddressLine1Text> 
      <HotelCityName_2>Fargo</HotelCityName> 
      <HotelStateCode_2>ND</HotelStateCode> 
      <HotelZip5Code_2>58103</HotelZip5Code> 
      <HotelZip4Code_2>099</HotelZip4Code> 
      </Hotel_2> 
      .... 
    </Hotel_Info> 

    <!-- Map to this schema  --> 
    <AvailableHotels> 
    <Hotel> 
    <HotelName>La Quinta Inn</HotelName> 
    <HotelAddressLine1Text>552 12th Street West</HotelAddressLine1Text> 
    <HotelCityName>Dickinson</HotelCityName> 
    <HotelStateCode>ND</HotelStateCode> 
    <HotelZip5Code>58601</HotelZip5Code> 
    <HotelZip4Code>099</HotelZip4Code> 
    </Hotel> 
    <Hotel> 
    <HotelName></HotelName> 
    <HotelAddressLine1Text>3803 13th Ave S</HotelAddressLine1Text> 
    <HotelCityName>Fargo</HotelCityName> 
    <HotelStateCode>ND</HotelStateCode> 
    <HotelZip5Code>58103</HotelZip5Code> 
    <HotelZip4Code>099</HotelZip4Code> 
    </Hotel> 
    </AvailableHotels> 

回答

0

如何用下劃線這些字段名稱映射到我的元素呢?

這裏你可以看看它的一種方法:

<xsl:template match="Hotel_Info"> 
    <AvailableHotels> 
     <xsl:for-each select="*"> 
      <Hotel> 
       <HotelName> 
        <xsl:value-of select="*[starts-with(name(), HotelName)]"/> 
       </HotelName> 
       <!-- more here --> 
      </Hotel> 
     </xsl:for-each> 
    </AvailableHotels> 
</xsl:template> 

或者,如果你的模式相匹配他們的,除了下劃線(和下劃線一致 - 與您的例子所示):

<xsl:template match="/Hotel_Info"> 
    <AvailableHotels> 
     <xsl:for-each select="*"> 
      <Hotel> 
       <xsl:for-each select="*"> 
        <xsl:element name="{substring-before(name(), '_')}"> 
         <xsl:value-of select="."/> 
        </xsl:element> 
       </xsl:for-each> 
      </Hotel> 
     </xsl:for-each> 
    </AvailableHotels> 
</xsl:template> 
+0

謝謝你隊友,非常感謝 – BreenDeen