Xml XSLT将集合值添加到返回的数字变量中

Xml XSLT将集合值添加到返回的数字变量中,xml,xslt,Xml,Xslt,这应该很简单,但在谷歌搜索了3个小时后,我显然没有找到正确的答案 我有和XML返回,我需要格式化一个页面。我无法控制返回,因为它来自UPS的数据库 我已经把它格式化好了,但是现在我需要把退货率提高4美元。这应该很容易,但我对这一切都很陌生,完全不知所措 以下是返回的XML的相关部分: <Response> <ResponseStatusCode>1</ResponseStatusCode> <ResponseStatusDescription>Su

这应该很简单,但在谷歌搜索了3个小时后,我显然没有找到正确的答案

我有和XML返回,我需要格式化一个页面。我无法控制返回,因为它来自UPS的数据库

我已经把它格式化好了,但是现在我需要把退货率提高4美元。这应该很容易,但我对这一切都很陌生,完全不知所措

以下是返回的XML的相关部分:

<Response>
<ResponseStatusCode>1</ResponseStatusCode>
<ResponseStatusDescription>Success</ResponseStatusDescription></Response>
<RatedShipment>
    <Service><Code>03</Code></Service>
    <TotalCharges>
        <CurrencyCode>USD</CurrencyCode>
        <MonetaryValue>21.17</MonetaryValue></TotalCharges>
    </RatedShipment>
</Response>
以下是XSL格式的相关部分:

<xsl:template match="/">
<select name="shipping_options" id="shipping_options">
    <xsl:for-each select="/RatingServiceSelectionResponse/RatedShipment">
      <xsl:choose>
        <xsl:when test="Service/Code = 01">
            <xsl:element name="option">
                <xsl:attribute name='value'>
                    1!!!
                    <xsl:value-of select="TotalCharges/MonetaryValue"/>
                </xsl:attribute>
                UPS Next Day Air - $
                <xsl:value-of select="format-number(TotalCharges/MonetaryValue, '###,###.00')"/>
            </xsl:element>
        </xsl:when>
      </xsl:choose>
    </xsl:for-each>
</select>
您可以这样尝试: (我修改了您的输入XML,其中一些不正确。)

您可以这样尝试: (我修改了您的输入XML,其中一些不正确。)


首先是一些假设

  • XML文件的根标记为
    ,但XSL代码引用了
    /RatingServiceSelectionResponse
    :我想这一定是
    /Response
  • 测试
    test=“Service/code=01”
    应该是带引号的
    test=“Service/code='01'
  • 如果要进行实验,XML文件应该在标记
    下包含文本
    01
    ,而不是
    03
    。否则,您的代码将无法执行任何操作
  • 在这种情况下,必须在表达式
    格式编号(TotalCharges/MonetaryValue+4',#######.00')中添加4。


    与此同时,塞巴斯蒂安的回答与我的回答完全相同…

    首先是一些假设

  • XML文件的根标记为
    ,但XSL代码引用了
    /RatingServiceSelectionResponse
    :我想这一定是
    /Response
  • 测试
    test=“Service/code=01”
    应该是带引号的
    test=“Service/code='01'
  • 如果要进行实验,XML文件应该在标记
    下包含文本
    01
    ,而不是
    03
    。否则,您的代码将无法执行任何操作
  • 在这种情况下,必须在表达式
    格式编号(TotalCharges/MonetaryValue+4',#######.00')中添加4。


    与此同时,塞巴斯蒂安的回答与我的回答完全相同……

    谢谢,请解释一下我的意思!这只是大得多的代码的一小部分,我只为我的问题包含了相关部分。我只想将响应的整数增加4。传入XML的格式由UPS设置,我无法更改。@Alith7:是的,但您的XSL代码必须与您收到的XML匹配。完整代码可以。我抓到的两个小剪子恰巧引用了不同的装运类型代码,但忽略这一部分,我需要帮助纠正的所有其他代码。谢谢,votre réponse解释了我的货物类型代码!这只是大得多的代码的一小部分,我只为我的问题包含了相关部分。我只想将响应的整数增加4。传入XML的格式由UPS设置,我无法更改。@Alith7:是的,但您的XSL代码必须与您收到的XML匹配。完整代码可以。我抓到的两个小剪报碰巧引用了不同的装运类型代码,但忽略了这一部分,我需要帮助纠正的所有其他代码。这两个解决方案都不起作用。首先,我的代码的格式对于我需要的输出是正确的,我需要一个特定的选项值来反馈到一个更大的公式中,但是我需要一个友好的、可视的下拉列表名称。第一名!!!实际上是后来使用的正则表达式snip中的触发器。我将用下拉列表的样子更新OP。其次,我不能像那样为每个循环使用动态,因为我需要基于服务代码类型的不同名称。UPS只返回XML格式的代码,我需要将其转换为友好的名称。最后,在公式中添加“+4”不起作用。这是一个很酷的网站!我以前从未用过。这里更新了完整的代码:等等,它可以工作-facepalm—我只是将它添加到XSL脚本的第一个选项行中,直到在您的高级网站上玩过之后才意识到最终输出的顺序是相同的!这是漫长的一天。简而言之,我所需要做的就是像这样添加“+4”:select=“format number(TotalCharges/MonetaryValue+4”,#######.00”),这两种解决方案都不起作用。首先,我的代码的格式对于我需要的输出是正确的,我需要一个特定的选项值来反馈到一个更大的公式中,但是我需要一个友好的、可视的下拉列表名称。第一名!!!实际上是后来使用的正则表达式snip中的触发器。我将用下拉列表的样子更新OP。其次,我不能像那样为每个循环使用动态,因为我需要基于服务代码类型的不同名称。UPS只返回XML格式的代码,我需要将其转换为友好的名称。最后,在公式中添加“+4”不起作用。这是一个很酷的网站!我以前从未用过。这里更新了完整的代码:等等,它可以工作-facepalm—我只是将它添加到XSL脚本的第一个选项行中,直到在您的高级网站上玩过之后才意识到最终输出的顺序是相同的!这是漫长的一天。简而言之,我所需要做的就是像这样添加“+4”:select=“format number(TotalCharges/MonetaryValue+4,######.00”)
    <select name="shipping_options" id="shipping_options">
        <option value="">Enter Zip Code To Update</option>
        <option value="1!!!77.49">UPS Next Day Air - $77.49</option>
        <option value="2!!!51.20">UPS 2nd Day Air - $51.20</option>
        <option value="3!!!22.73">UPS Ground - $22.73</option>
        <option value="4!!!38.01">UPS 3 Day Select - $38.01</option>
        <option value="5!!!71.02">UPS Next Day Air Saver - $71.02</option>
        <option value="6!!!108.01">UPS Next Day Air Early - $108.01</option>
        <option value="8!!!0.00">Please call for freight pricing - $0.00</option>
        <option value="9!!!0.00">Please call for international pricing - $0.00</option>
            </select>
    
    select="format-number(TotalCharges/MonetaryValue + 4, '###,###.00')"
    
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0">
    
      <xsl:output method="html" indent="yes"/>
    
        <xsl:template match="/">
            <select name="shipping_options" id="shipping_options">
                <xsl:for-each select="Response/RatingServiceSelectionResponse/RatedShipment">
                  <xsl:choose>
                    <xsl:when test="Service/Code = '01'">
                        <xsl:element name="option">
                            <xsl:attribute name="value">UPS Next Day Air - $</xsl:attribute>
                            <xsl:value-of select="format-number(TotalCharges/MonetaryValue + 4, '###,###.00')"/>
                        </xsl:element>
                    </xsl:when>
                  </xsl:choose>
                </xsl:for-each>
            </select>
        </xsl:template>
    
    </xsl:stylesheet>
    
    <xsl:for-each select="Response/RatingServiceSelectionResponse/RatedShipment[Service/Code = '01']">
      <option value="UPS Next Day Air - ${format-number(TotalCharges/MonetaryValue + 4, '###,###.00')}"/>
    </xsl:for-each>