使用旧版Web服务中的XSLT映射到对象集合

时间:2016-08-18 21:27:10

标签: xml xslt

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

<cfset myStru = { stores = [] }>
<cfset myTmpStru = { storeid = 101, storename = "STORE101", reports = [ ] }>
<cfset myTmpStru2 = { reportid = 201, reportname = "REPORT201", pics = [ ] }>
<cfset ArrayAppend( myTmpStru.reports, myTmpStru2 )>
<cfset ArrayAppend( myStru.stores, myTmpStru )>

1 个答案:

答案 0 :(得分: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>