【问题标题】:Mapping to a collection of objects using XSLT from Legacy web service使用来自 Legacy Web 服务的 XSLT 映射到对象集合
【发布时间】:2016-08-19 14:22:40
【问题描述】:

我正在尝试使用 XSLT 从从外部遗留 Web 服务接收的数据填充 xml,该服务提供机器生成的酒店信息值。它们为酒店提供带有下划线和数字的元素名称,如下所示 例如 HotelName_1、HotelName_2 等。如何将这些带下划线的字段名称映射到我的元素?

 <!-- 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>

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    如何将这些带下划线的字段名称映射到我的元素?

    这是您可以查看的一种方式:

    <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>
    

    【讨论】:

    • 谢谢你的朋友,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2018-10-05
    相关资源
    最近更新 更多