Xml XSLT将集合值添加到返回的数字变量中
这应该很简单,但在谷歌搜索了3个小时后,我显然没有找到正确的答案 我有和XML返回,我需要格式化一个页面。我无法控制返回,因为它来自UPS的数据库 我已经把它格式化好了,但是现在我需要把退货率提高4美元。这应该很容易,但我对这一切都很陌生,完全不知所措 以下是返回的XML的相关部分:Xml XSLT将集合值添加到返回的数字变量中,xml,xslt,Xml,Xslt,这应该很简单,但在谷歌搜索了3个小时后,我显然没有找到正确的答案 我有和XML返回,我需要格式化一个页面。我无法控制返回,因为它来自UPS的数据库 我已经把它格式化好了,但是现在我需要把退货率提高4美元。这应该很容易,但我对这一切都很陌生,完全不知所措 以下是返回的XML的相关部分: <Response> <ResponseStatusCode>1</ResponseStatusCode> <ResponseStatusDescription>Su
<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,其中一些不正确。)
首先是一些假设
,但XSL代码引用了/RatingServiceSelectionResponse
:我想这一定是/Response
test=“Service/code=01”
应该是带引号的test=“Service/code='01'
下包含文本01
,而不是03
。否则,您的代码将无法执行任何操作
格式编号(TotalCharges/MonetaryValue+4',#######.00')中添加4。
与此同时,塞巴斯蒂安的回答与我的回答完全相同…首先是一些假设
,但XSL代码引用了/RatingServiceSelectionResponse
:我想这一定是/Response
test=“Service/code=01”
应该是带引号的test=“Service/code='01'
下包含文本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>