2016-08-18 2 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

関連する問題