- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个要求,必须根据某些 Xpath 条件更新值。
输入
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header/>
<S:Body>
<ns2:ReturnUpdateRequest xmlns="urn:ibm:uscomm:service:header" xmlns:ns2="ibm:ServiceReturnUpdate" Version="1.0">
<Header>
<DocumentIdentifier>0001013083-1436198976111</DocumentIdentifier>
<DocumentDateTime>2015-07-06T13:09:36.111-03:00</DocumentDateTime>
<From>
<PartnerName>MYibm_ONLINE</PartnerName>
<PartnerIdentifier type="USER_ID">0001013083</PartnerIdentifier>
</From>
<DataSource>MYibm_ONLINE</DataSource>
</Header>
<ns2:ReturnUpdateRequestBody>
<ns2:DealerEntity>
<ns2:PartnerIdentifier Type="SAP_ID">0001013083</ns2:PartnerIdentifier>
</ns2:DealerEntity>
<ns2:ReturnUpdateList>
<ns2:ReturnUpdateProperties>
<ns2:DocumentNumber>0020014759</ns2:DocumentNumber>
<ns2:PurchaseOrderNumber>CHG1</ns2:PurchaseOrderNumber>
<ns2:Status>SAVED</ns2:Status>
<ns2:DateSubmitted>0000-00-00</ns2:DateSubmitted>
<ns2:RequestedPickupDate/>
<ns2:ReturnUpdateItemDetails>
<ns2:DocumentNumber></ns2:DocumentNumber>
<ns2:ItemNumber>000010</ns2:ItemNumber>
<ns2:ProductInformation>
<ns2:ProductIdentification>
<ns2:ProductIdentifier Type="SAP">CANOLA</ns2:ProductIdentifier>
<ns2:ProductName>DKL27-20 RR 50# GSSANG</ns2:ProductName>
</ns2:ProductIdentification>
<ns2:BatchNumber>4421-AAA1</ns2:BatchNumber>
<ns2:ItemAction>Update</ns2:ItemAction>
<ns2:ScheduledPickupDate>0000-00-00</ns2:ScheduledPickupDate>
<ns2:BaseQuantity>
<ns2:Measurement>
<ns2:MeasurementValue>40</ns2:MeasurementValue>
</ns2:Measurement>
</ns2:BaseQuantity>
</ns2:ProductInformation>
</ns2:ReturnUpdateItemDetails>
<ns2:ReturnUpdateItemDetails>
<ns2:DocumentNumber></ns2:DocumentNumber>
<ns2:ItemNumber>000020</ns2:ItemNumber>
<ns2:ProductInformation>
<ns2:ProductIdentification>
<ns2:ProductIdentifier Type="SAP">CANOLA</ns2:ProductIdentifier>
<ns2:ProductName>DKL27-20 RR 50#</ns2:ProductName>
</ns2:ProductIdentification>
<ns2:BatchNumber>4421-AAA2</ns2:BatchNumber>
<ns2:ScheduledPickupDate>0000-00-00</ns2:ScheduledPickupDate>
<ns2:BaseQuantity>
<ns2:Measurement>
<ns2:MeasurementValue>80</ns2:MeasurementValue>
</ns2:Measurement>
</ns2:BaseQuantity>
</ns2:ProductInformation>
</ns2:ReturnUpdateItemDetails>
</ns2:ReturnUpdateProperties>
</ns2:ReturnUpdateList>
</ns2:ReturnUpdateRequestBody>
</ns2:ReturnUpdateRequest>
</S:Body>
代码
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:dp="http://www.datapower.com/extensions" xmlns:dpconfig="http://www.datapower.com/param/config" extension-element-prefixes="dp" exclude-result-prefixes="dp dpconfig" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mon="Monsanto:ServiceReturnDetail" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
<xsl:output method="xml" indent="yes"/>
<!-- <xsl:strip-space elements="*"/>-->
<xsl:template match="/">
<!--<dp:remove-http-request-header name="Accept"/>-->
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
<soapenv:Header/>
<soapenv:Body>
<urn:YSdsaUsseedRetUpdate>
<IIdent>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='Header']/*[local-name()='DocumentIdentifier']"/>
</IIdent>
<ISrc>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='DealerEntity']/*[local-name()='PartnerIdentifier']/@*[local-name()='Type']"/>
</ISrc>
<ItHdr>
<item>
<xsl:if test="/soapenv:Envelope/soapenv:Body/mon:ReturnUpdateRequest/mon:ReturnUpdateRequestBody/mon:ReturnUpdateList/mon:ReturnUpdateProperties/mon:DocumentNumber != ' ' " >
<Yyvbeln>
<xsl:value-of select="*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='DocumentNumber']"/>
</Yyvbeln>
</xsl:if>
<YyreqType>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='DocumentNumber']"/>
</YyreqType>
<Yykunnr>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='DealerEntity']/*[local-name()='PartnerIdentifier']"/>
</Yykunnr>
<Yyzuonr>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='PurchaseOrderNumber']"/>
</Yyzuonr>
<Yystatus>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='Status']"/>
</Yystatus>
<Yybstdk>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='RequestedPickupDate']"/>
</Yybstdk>
<Yymahdt>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='DateSubmitted']"/>
</Yymahdt>
<Yyuser>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='UserId']"/>
</Yyuser>
</item>
</ItHdr>
<ItItem>
<xsl:for-each select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='ReturnUpdateItemDetails']">
<item>
<xsl:if test="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='ReturnUpdateItemDetails']/*[local-name()='DocumentNumber'] != ' ' " >
<Yyvbeln>
<xsl:value-of select="*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='DocumentNumber']"/>
</Yyvbeln>
</xsl:if>
<Yyitm>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='ReturnUpdateItemDetails']/*[local-name()='ItemNumber']"/>
</Yyitm>
<YymatEn>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='ReturnUpdateItemDetails']/*[local-name()='ProductInformation']/*[local-name()='ProductIdentification']/*[local-name()='ProductIdentifier']/@*[local-name()='Type']"/>
</YymatEn>
<Yymatnr>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='ReturnUpdateItemDetails']/*[local-name()='ProductInformation']/*[local-name()='ProductIdentification']/*[local-name()='ProductIdentifier']"/>
</Yymatnr>
<Yykdmat>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='ReturnUpdateItemDetails']/*[local-name()='ProductInformation']/*[local-name()='BatchNumber']"/>
</Yykdmat>
<Yyzmeng>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='ReturnUpdateItemDetails']/*[local-name()='ProductInformation']/*[local-name()='BaseQuantity']/*[local-name()='Measurement']/*[local-name()='MeasurementValue']"/>
</Yyzmeng>
<Yyzieme>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='ReturnUpdateItemDetails']/*[local-name()='ProductInformation']/*[local-name()='BaseQuantity']/*[local-name()='Measurement']/*[local-name()='UnitOfMeasureCode']"/>
</Yyzieme>
<Yyaction>
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='ReturnUpdateRequestBody']/*[local-name()='ReturnUpdateList']/*[local-name()='ReturnUpdateProperties']/*[local-name()='ReturnUpdateItemDetails']/*[local-name()='ProductInformation']/*[local-name()='ItemAction']"/>
</Yyaction>
</item>
</xsl:for-each>
</ItItem>
</urn:YSdsaUsseedRetUpdate>
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
</xsl:stylesheet>
我从代码中获得的输出。
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mon="Monsanto:ServiceReturnDetail" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
<soapenv:Header/>
<soapenv:Body>
<urn:YSdsaUsseedRetUpdate>
<IIdent>0001013083-1436198976111</IIdent>
<ISrc>SAP_ID</ISrc>
<ItHdr>
<item>
<YyreqType>0020014759</YyreqType>
<Yykunnr>0001013083</Yykunnr>
<Yyzuonr>CHG1</Yyzuonr>
<Yystatus>SAVED</Yystatus>
<Yybstdk/>
<Yymahdt>0000-00-00</Yymahdt>
<Yyuser/>
</item>
</ItHdr>
<ItItem>
<item>
<Yyvbeln/>
<Yyitm>000010</Yyitm>
<YymatEn>SAP</YymatEn>
<Yymatnr>CANOLA</Yymatnr>
<Yykdmat>4421-AAA1</Yykdmat>
<Yyzmeng>40</Yyzmeng>
<Yyzieme/>
<Yyaction>Update</Yyaction>
</item>
<item>
<Yyvbeln/>
<Yyitm>000010</Yyitm>
<YymatEn>SAP</YymatEn>
<Yymatnr>CANOLA</Yymatnr>
<Yykdmat>4421-AAA1</Yykdmat>
<Yyzmeng>40</Yyzmeng>
<Yyzieme/>
<Yyaction>Update</Yyaction>
</item>
</ItItem>
</urn:YSdsaUsseedRetUpdate>
</soapenv:Body>
</soapenv:Envelope>
预期输出应获得更新值 <ns2:ItemNumber>000010</ns2:ItemNumber>
对于每一个我都在做。由于某种原因,我得到了相同的值。
预期输出:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mon="Monsanto:ServiceReturnDetail" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
<soapenv:Header/>
<soapenv:Body>
<urn:YSdsaUsseedRetUpdate>
<IIdent>0001013083-1436198976111</IIdent>
<ISrc>SAP_ID</ISrc>
<ItHdr>
<item>
<YyreqType>0020014759</YyreqType>
<Yykunnr>0001013083</Yykunnr>
<Yyzuonr>CHG1</Yyzuonr>
<Yystatus>SAVED</Yystatus>
<Yybstdk/>
<Yymahdt>0000-00-00</Yymahdt>
<Yyuser/>
</item>
</ItHdr>
<ItItem>
<item>
<Yyvbeln/>
<Yyitm>000010</Yyitm>
<YymatEn>SAP</YymatEn>
<Yymatnr>CANOLA</Yymatnr>
<Yykdmat>4421-AAA1</Yykdmat>
<Yyzmeng>40</Yyzmeng>
<Yyzieme/>
<Yyaction>Update</Yyaction>
</item>
<item>
<Yyvbeln/>
<Yyitm>000020</Yyitm>
<YymatEn>SAP</YymatEn>
<Yymatnr>CANOLA</Yymatnr>
<Yykdmat>4421-AAA1</Yykdmat>
<Yyzmeng>80</Yyzmeng>
<Yyzieme/>
<Yyaction>Update</Yyaction>
</item>
</ItItem>
</urn:YSdsaUsseedRetUpdate>
</soapenv:Body>
</soapenv:Envelope>
更新。感谢 LarsH 的建议。
YymatEn>
<xsl:value-of select="*[local-name()='ProductIdentifier']/@*[local-name()='Type']"/>
</YymatEn>
<Yymatnr>
<xsl:value-of select="*[local-name()='ProductIdentifier']"/>
</Yymatnr>
<Yykdmat>
<xsl:value-of select="*[local-name()='BatchNumber']"/>
</Yykdmat>
<Yyzmeng>
<xsl:value-of select="*[local-name()='MeasurementValue']"/>
</Yyzmeng>
<Yyzieme>
<xsl:value-of select="*[local-name()='UnitOfMeasureCode']"/>
</Yyzieme>
<Yyaction>
<xsl:value-of select="*[local-name()='ItemAction']"/>
</Yyaction>
我已经尝试了上述所有语句,但由于某种原因我没有得到这些值。
最佳答案
您看到问题的原因是您的代码没有使用每次迭代时 for-each 选择的上下文。
例如,当你这样做时
<xsl:for-each select="/*[local-name()='Envelope']/
*[local-name()='Body']/
*[local-name()='ReturnUpdateRequest']/
*[local-name()='ReturnUpdateRequestBody']/
*[local-name()='ReturnUpdateList']/
*[local-name()='ReturnUpdateProperties']/
*[local-name()='ReturnUpdateItemDetails']">
for-each 中的代码在 ReturnUpdateItemDetails
的上下文中运行。元素...每个选定的元素一次 ReturnUpdateItemDetails
元素。因此该代码应该使用上下文元素来继续:
<item>
<xsl:if test="*[local-name()='DocumentNumber'] != ' ' " >
请注意,我砍掉了从根导航的 XPath 表达式的所有初始部分,并使用了上下文节点。如果每次都从根开始,您将选择全部 DocumentNumber
匹配该 XPath 表达式的元素,而不是一次迭代一个元素。在某些用法中,这意味着您最终每次都只会获得第一个值。
因此,您需要对 for-each 中的每个 XPath 表达式执行相同的操作:删除 for-each 已选择的部分,并使用上下文节点。例如
<Yyitm>
<xsl:value-of select="*[local-name()='ItemNumber']"/>
</Yyitm>
关于使用 XSLT 有很多话要说,因为它就是用来使用的,例如使用命名空间而不是避免它们,并使用模板。但是,通过阅读 XSLT 教程或书籍比通过问答更好地实现这一点。 (查看 xslt 标签信息页面上的资源。)
同样,如果您的 for-each XPath 以 *[local-name()='ReturnUpdateItemDetails']
结尾,您正在选择 ReturnUpdateItemDetails
每次元素作为上下文节点。例如,代替
<xsl:value-of select="*[local-name()='ProductIdentifier']/@*[local-name()='Type']"/>
您需要从 ReturnUpdateItemDetails
开始,例如通过选择其子项之一,ProductInformation
接下来是 ProductIdentification
在您到达 ProductIdentifier
之前:
<xsl:value-of select="ns2:ProductInformation/ns2:ProductIdentification/
ns2:ProductIdentifier/@Type" />
其中 ns2
命名空间前缀在代码的祖先元素上声明(例如 <soapenv:Envelope>
):
<soapenv:Envelope xmlns:ns2="ibm:ServiceReturnUpdate"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ...
我强烈建议您先更好地了解 XPath 和 XSLT 的基础知识,然后再尝试通过反复试验进一步推进。
关于xslt - xsl 每个不使用 XSLT 1.0 更新所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31253972/
我有一个 XSLT 样式表,如下所示: 我想使用第二个 XSLT 样式表来转换此样式表,以删除与 XQHead
我们有一个大型 xslt,可以呈现整个商店区域,包括产品、制造商,并根据价格和类别进行过滤。我使用 sitecore 作为 CMS,但遇到缓存问题。我有大约 9000 个项目,有些页面需要长达 20
我想根据条件的结果应用具有不同参数的模板。像这样: Attribute no. 1
我有一些看起来像这样的 XML Foo Details Bar Details Baz Details Foo Blah Bar BlahBlah Baz BlahBlahBl
我试图从这种输入出发: a b c d e f g ... 使用 XSLT 的 HTML 输出: one two a e b f
我想知道如何在 xslt 中找到特定节点的第一个子节点名称。 我有一个 xml: some text 我可以使用 body/
是否可以在 XSLT 中获取上个月的最后一天?我找到了这个函数:http://www.xsltfunctions.com/xsl/functx_last-day-of-month.html但我不确定如
具有特定节点的匹配元素存在问题。 xml: description of profile PhoneKeyPad S
我将一堆键值对作为参数传递给 XSL(日期 ->“1 月 20 日”,作者 ->“Dominic Rodger”,...)。 我正在解析的一些 XML 中引用了这些 - XML 如下所示: 目前,除
我找不到这个问题的确切答案,所以我希望有人能在这里帮助我。 我有一个字符串,我想在最后一个 '.' 之后获取子字符串。我正在使用 xslt 1.0。 这是怎么做的?这是我的代码。
我在尝试找出 xslt 上的 var 范围时遇到问题。我实际上想要做的是忽略具有重复“旅游代码”的“旅行”标签。 示例 XML: X1 Budapest X1 Budapest X
我有一些数据在 xslt 的 for-each 循环中输出。我对列表进行了分页,但没有对排序选择器进行分页。 用户应该能够对 2 个值(创建的数据和每个项目的数字字段)进行排序。默认的排序方法是创建日
我有一个奇怪的要求。 我在 xslt 中有一个包含月份的变量,带有它们的 id (1-12) 问题是我需要全部显示它们,但从一月(1)以外的月份开始。 目前我有以下 JAN
如何在 xslt 转换中模块化一组重复的输出?例如,我有如下内容(伪代码)。 并
我得到一个像这样的字符串。 13091711111100222222003333330044444400 字符串的模式是这样的 13 - 09 - 17 - 11111 - 100 - 22222 -
我是 XSLT 的新手,有一个一般性问题。为了区分具有不同属性的两个元素,最好(也是为了性能)使用 和 而不是 在一个模板中。据我所知,这就是 XSLT 中应该“思考”的方式。但在我看来,这有一个缺点
如何从“19650512-0065”到“196505120065”这样的字符串中删除连字符 使用这个模板:传递 theID =
是否有任何功能可以在左侧填充零? 我正在尝试做的要求是: 我们不知道即将到来的输入字符串长度。 如果小于 20,我们必须在左侧填充零。 如果输入字符串长度为 10,那么我们必须在左侧填充 10 个零。
身份模板如下所示: 是否选择多于 ,或者身份模板可能是这样的? 当我执行以下操作时,究竟选择了什么? 最佳答案
我正在尝试使用 XML 信息和 XSLT 模板创建超链接。这是 XML 源代码。 Among individual stocks, the top percentage gainers in the
我是一名优秀的程序员,十分优秀!